ZXing条码扫描-竖屏解决方案
来源:互联网 发布:风声小说知乎 编辑:程序博客网 时间:2024/04/25 11:37
写在前面的话
感谢ZXing团队,项目下载地址:https://github.com/zxing/zxing,项目下载后,Android条码扫描主要用到三个模块:android,android-core,core。zxing项目解压后目录结构如图所示:android是ZXing提供的条码扫描器apk客户端源码,android-core和core是需要的类库。本文提供的zxing竖屏扫描解决方案采用的android版本号versionName为4.7.4,versionCode为104,zxing类库版本号为3.2.0,理论上4.7.x通用。
zxing类库无法直接导入Eclipse,笔者采用的方式是新建工程ZXLib后,将android-core,core中的java代码拷贝进去,注意android-core中只有一个CameraConfigurationUtils.java类,主要类库是core,CameraConfigurationUtils.java的包名:com.google.zxing.client.android.camera,拷贝进去时需要与core类库的相应包名对应,最后别忘记将这个工程设置为library。
友情提示:本文提供解决方案,类库源码不进行任何修改,以下提到的修改部分均为客户端源码。
zxing如何竖屏扫描
将zxing源码android导入Eclipse后,关联ZXLib,也就是刚才新建的ZXing类库。运行后可直接使用条码扫描功能,可是默认是横屏,笔者项目中需要使用竖屏方式扫描,于是需要将zxing条码扫描改成竖屏方式扫描。步骤写的有些细致,请耐心阅读。第一步:修改AndroidManifest工程清单,AndroidManifest中CaptureActivity的screenOrientation属性改为portrait:
- <activity android:name=".CaptureActivity"
- android:screenOrientation="portrait"
- android:clearTaskOnLaunch="true"
- android:stateNotNeeded="true"
- android:theme="@style/CaptureTheme"
- android:windowSoftInputMode="stateAlwaysHidden">
- // if (prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION, true)) {
- // setRequestedOrientation(getCurrentOrientation());
- // } else {
- // setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
- // }
第三步:在CaptureActivity中把onCreate方法结尾处添加代码:
- if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
- } else {
- setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
- }
第四步:在CameraConfigurationManager的setDesiredCameraParameters方法中添加代码:
- camera.setDisplayOrientation(90);//add 这句代码作用是旋转镜头90度,使相机预览方向正确显示
- camera.setParameters(parameters);
第五步:修改CameraManager中getFramingRectInPreview方法:
- // rect.left = rect.left * cameraResolution.x / screenResolution.x;
- // rect.right = rect.right * cameraResolution.x / screenResolution.x;
- // rect.top = rect.top * cameraResolution.y / screenResolution.y;
- // rect.bottom = rect.bottom * cameraResolution.y / screenResolution.y;
- rect.left = rect.left * cameraResolution.y / screenResolution.x;
- rect.right = rect.right * cameraResolution.y / screenResolution.x;
- rect.top = rect.top * cameraResolution.x / screenResolution.y;
- rect.bottom = rect.bottom * cameraResolution.x / screenResolution.y;
第六步:修改DecodeHandler中的decode(byte[] data, int width, int height)方法:
- PlanarYUVLuminanceSource source = activity.getCameraManager().buildLuminanceSource(data, width, height);
- byte[] rotatedData = new byte[data.length];
- for (int y = 0; y < height; y++) {
- for (int x = 0; x < width; x++)
- rotatedData[x * height + height - y - 1] = data[x + y * width];
- }
- int tmp = width;
- width = height;
- height = tmp;
- data = rotatedData;
结束语
只进行了第五步,而没有第六步,会在zxing类库的CameraConfigurationUtils 283行抛出异常- IllegalStateException("Parameters contained no preview size!");
好了,经过以上六步,zxing条码扫描器已经可以正常竖屏扫描了,剩下的工作就是精简代码了,祝大家顺利完成项目。
转载请注明作者xiong_it和原文出处:http://blog.csdn.net/xiong_it/article/details/46983293,谢谢!
0 0
- ZXing条码扫描-竖屏解决方案
- ZXing条码扫描-竖屏解决方案
- ZXing条码扫描-竖屏解决方案
- ZXing条码扫描----竖屏解决方案
- Android开发:ZXing条码扫描-竖屏解决方案
- Android开发:ZXing条码扫描-竖屏解决方案
- android zxing 扫描条码,竖屏扫描
- Zxing 扫描条码实现竖屏模式(portrait) 摄像头camera 旋转90度
- Android Zxing 扫描条码实现竖屏模式 Camera摄像头 旋转90度
- Android Zxing 扫描条码实现竖屏模式(portrait mode) 摄像头camera 旋转90度
- Android Zxing 扫描条码实现竖屏模式 Camera摄像头 旋转90度
- 条码二维码扫描ZXing简化版源码(竖屏完美版)
- 使用zxing扫描条码是设置扫码方向为竖屏
- 基于ZXing项目开发的条码扫描横屏
- zxing 竖屏扫描
- Android条码扫描ZBar和ZXing浅谈
- Android条码扫描ZBar和ZXing浅谈
- ZXing条码扫描Android版编译过程
- java多态的理解
- 潘鹏整理WPF(2)轻量级文本因Size小模糊解决
- 对Extjs中store的多种操作
- 算法基础——判断一个字符串至多添加一个字符之后是否回文
- hdoj 1047 Integer Inquiry(几个大数连续加)
- ZXing条码扫描-竖屏解决方案
- Android--Animotion动画详解-逐帧动画,补间动画,属性动画。
- hdoj 5461 Largest Point 【枚举所有情况 找最大值】
- BCB的文件操作函数
- 黑马程序员_IO流(二)
- 整合apache和tomcat构建Web服务器
- CSS 神奇的border(二)
- Unity5打包Assetbundle 出错 `System.IO.File' does not contain a definition for `ReadAllBytes'
- ViewPager的更新数据