安卓开发之二维码扫描(可以做自定义扫描区域)
来源:互联网 发布:character mysql 编辑:程序博客网 时间:2024/05/21 08:05
在使用官方的框架和第三方的框架的时候发现了一个很大的问题,那就是扫描的区域就只有从屏幕中间扩展出来的扫描区域进行扫描,没有说可以自己定义扫描区域的方法,我很纳闷,也可能是我在读别人的源码的时候忽略掉了,但是仅仅只有这个问题也就算了,但是偏偏实现的逻辑是在activity中,如果仿照这个Activity在自己的项目中使用的话感觉通用性太低了,所以,强迫症犯了,干脆自己写一个工具类来给别人开放出去,让别人调用吧,于是参考极光的调用方式以及https://github.com/yangxixi88/ZxingLite这个比人写的工具,以及官方代码:https://github.com/zxing/zxing这三个开始写自己的工具吧。
官方的代码和别人的工具代码最终其实就三步,分别是界面创建时的操作、界面获取到焦点与失去焦点的操作,所以我就干脆直接在工具类中创建这三个方法,然后将Activity实例传入,用来给一些需要Activity实例的方法调用,然后Activity的oncreate、onpause、onresume这三个方法中分别调用工具类中的三个方法,用来初始化以及使用二维码扫描等操作。
具体使用不是很复杂,就是实例化工具类,调用相关方法就可以,至于具体的思路直接按调用方法一步一步向下走就可以了,入口其实就是onresume方法,从这里按方法向下走就可以,每一步都有解释的!
其中的方法有:
1. onCreate(Activity activity);//在扫描界面创建的时候调用该方法,用来创建一些必须变量;
2. onResume();//在界面获得焦点的时候需要调用该方法,用来初始化一些管理器与扫描配置,但是在调用之前需要请求两个权限;
3. onPause();//在扫描界面的onpause方法中需要调用这个方法,用来在界面失去焦点的时候关闭不必要线程;
4. getSurfaceView();//获取sufaceview;
5. handleDecode(Result rawResult, Bitmap barcode, float scaleFactor);//扫描结果回传;
6. showScanImage(Bitmap bitmap);//当前正在扫描的灰度图;
7. getLeftPercent();//左侧非扫描界面百分比,范围(0-1);
8. getTopPercent();//左侧非扫描界面百分比,范围(0-1);
9. getRighttPercent();//左侧非扫描界面百分比,范围(0-1);
10. getBottomPercent();//左侧非扫描界面百分比,范围(0-1);
11. isRunningScan();//是否要扫描,因为在获得扫描结果后会回传到界面当中,但是,当回传的界面执行onpause方法后会重置扫描,所以需要这个值;
12. initCamera(SurfaceHolder surfaceHolder);//初始化相机参数;
13. resetDecode();//重置解码器,使其可以重新进行扫描操作;
调用demo:
package com.myzxingtest.android;import android.Manifest;import android.content.pm.PackageManager;import android.graphics.Bitmap;import android.os.Bundle;import android.support.v4.app.ActivityCompat;import android.support.v7.app.AppCompatActivity;import android.view.SurfaceView;import android.view.View;import android.widget.ImageView;import android.widget.Toast;import com.google.zxing.Result;import com.myzxing.android.in.QrCodeEncode;public class MainActivity extends AppCompatActivity {private SurfaceView surfaceView;private ImageView imgView;private QrCodeEncode qrCodeEncode;@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //异常信息收集 CrashHandler catchHandler = CrashHandler.getInstance(); catchHandler.init(getApplicationContext()); setContentView(R.layout.activity_main); surfaceView = findViewById(R.id.sufaceView); imgView = findViewById(R.id.imgView); qrCodeEncode = new QrCodeEncode() { @Override protected SurfaceView getSurfaceView() { return surfaceView; } @Override protected void handleDecode(final Result rawResult, final Bitmap barcode, float scaleFactor) { runOnUiThread(new Runnable() { @Override public void run() { imgView.setImageBitmap(barcode); Toast.makeText(MainActivity.this, rawResult.getText(), Toast.LENGTH_LONG).show(); } }); } @Override protected void showScanImage(final Bitmap bitmap) { runOnUiThread(new Runnable() { @Override public void run() { imgView.setImageBitmap(bitmap); } }); } @Override protected float getLeftPercent() { return 0.4f; } @Override protected float getTopPercent() { return 0.4f; } @Override protected float getRighttPercent() { return 0.4f; } @Override protected float getBottomPercent() { return 0.4f; } @Override protected boolean isRunningScan() { return true; } }; qrCodeEncode.onCreate(this); imgView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { imgView.setImageDrawable(null); qrCodeEncode.resetDecode(); } });}@Overrideprotected void onPause() { super.onPause(); qrCodeEncode.onPause();}@Overrideprotected void onResume() { super.onResume(); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } qrCodeEncode.onResume();}}
代码地址:https://github.com/Loren-Wang/MyZXing
- 安卓开发之二维码扫描(可以做自定义扫描区域)
- ZBar 二维码扫描(自定义区域扫描)
- 安卓开发简单扫描二维码操作
- Android开发之二维码扫描
- iOS开发之二维码扫描
- iOS 原生二维码扫描(可限制扫描区域)
- iOS 原生二维码扫描(可限制扫描区域)
- iOS 原生二维码扫描(可限制扫描区域)
- iOS 原生二维码扫描(可限制扫描区域)
- iOS 原生二维码扫描(可限制扫描区域)
- iOS 原生二维码扫描(可限制扫描区域)
- iOS 原生二维码扫描(可限制扫描区域)
- iOS 原生二维码扫描(可限制扫描区域)
- iOS开发之 二维码生成/二维码扫描
- iOS原生二维码扫描(可以指定有效区域)
- 开发一个基于ZXing库以及安卓Studio的二维码扫描小程序(一)
- 开发一个基于ZXing库以及安卓Studio的二维码扫描小程序(二)
- 自定义ZBAR,二维码扫描
- Asteroids
- 网络编程之Socket通信(Java)
- WebView教程
- 【Unity3D】关于UGUI事件的手动挂载一点小发现
- HDLC配置
- 安卓开发之二维码扫描(可以做自定义扫描区域)
- 数据结构递归之迷宫
- ez_setup.py(安装python下setuptools用)
- css清除浮动的三种方式
- 自定义view圆形回加载条
- C3D
- 深度学习引论(一):神经网络简要介绍&熟悉Matlab
- faster-rcnn系列学习之准备数据
- 深度学习之基础模型-DenseNet