ZXing3.1的使用(限制最低版本19,即android4.4)
转载请声明地址:http://blog.csdn.net/skyunicorn/article/details/52274603
参考资料:http://blog.csdn.net/eclipsexys/article/details/47834865(我没看文章,直接下的源码自己边运行边分析的)
官方的Demo是写好了一个CaptureActivity提供回调,从自己的页面跳到CaptureActivity,扫描后把数据传回自己的页面(一次只能扫码一条)。
但是我们项目想做到一个自定义扫码布局,并实现类似扫码枪的效果,即在当前页面连续扫码,且在当前页面有所反馈。
将zxing.jar放在app的libs下,并右键aslibrary
新建一个将zxing文件放入根目录
导入需要的资源文件ids.xml、activity_capture、qr_code_bg.9.png、scan_line.png、shadow.png、res底下raw文件夹
注册权限
android
:name=
"android.permission.CAMERA"
/>
android
:name=
"android.permission.VIBRATE"
/>
注册activity
<
activity
android
:name=
".zxing.activity.CaptureActivity"
/>
- 使用
主要用到的几个类
CaptureActivity:扫码页面
CameraManager:处理Activity的消息机制
CameraConfigurationManager:该类主要负责设置相机的参数信息
DecodeFormatManager:设置扫码的种类
修改:
布局文件就不说了,修改成自己想要的样子,和原文件有一点不同的是,将SurfaceView设置到根布局下,设置layout_height为match_parent(不这么修改,会导致变形,因为预览用的是屏幕分辨率的宽高)。其他的想怎么改就这么改了。
CaptureActivity文件:
handleDecode()方法中,把页面跳转的语句删除,设置为加载数据(这里我为了方便只设置了一个Textview加载数据,可以换成listview)
initCrop()方法中,原算法为
int x = cropLeft * cameraWidth / containerWidth;
int y = cropTop * cameraHeight / containerHeight;
int width = cropWidth * cameraWidth / containerWidth;
int height = cropHeight * cameraHeight / containerHeight;
在这我没弄懂原作者的意思,这算法在全屏没有问题,但是自定义的时候,由于调用的cameraHeight是屏幕的分辨率,而containerHeight是布局高度,会导致扫码框范围变形(布局是看不出来的,看打印日志计算就知道了)。
修改为:
int x = cropLeft;
int y = cropTop;
int width = cropWidth;
int height = cropHeight;
CameraConfigurationManager文件:
设置预览效果:搜索parameters.setPreviewSize
CaptureActivityHandler文件:
原作者是扫码一次后就不继续扫码,这里我们做个修改。
设置一个线程,控制扫码间隔(否则会连续扫码,不合适),这里我设置的是间隔2s
// 设置扫码间隔
class MyThread extends Thread
{
@Override
public void run()
{
super.run();
try
{
MyThread.sleep(2000);
cameraManager.requestPreviewFrame(decodeThread.getHandler(), R.id.decode);
} catch (InterruptedException e)
{
e.printStackTrace();
}
}
}
然后在handleMessage()的message.what == R.id.decode_succeeded下面修改
添加
new MyThread().start()
;
这样我们就可以每隔2s扫码一次了
最后我们要的效果就实现了,这个功能虚拟机没法做测试,各位下载Demo自己演示吧。
Demo地址:http://download.csdn.net/detail/skyunicorn/9609334
参考资料的库:https://github.com/xuyisheng/ZXingLib
大家可以对比着看。