Android集成ZXing二维码扫描,附加竖屏并且不拉伸图片的demo
2014-09-14 09:37
661 查看
在开发中我们可能会需要我们的APP具有扫描二维码的功能,本文将介绍一个直接可以借用的二维码扫描demo来帮助新手们在集成二维码扫描时所遇到的问题.
如果你还不清楚ZXing,推荐先阅读此博客: /article/1562143.html
能解决的问题:
<1.教你1分钟集成二维码扫描功能到你的APP里.
<2.解决从其他网站或博客下载的demo发现扫描的时候图片出现拉伸的问题.
<3.解决扫描速度比较慢的问题.
一.首先贴上我们的项目结构图:(此项目是一个月前从CSDN下载解决了图片拉伸问题的代码,并非本人原创)
废话不多说,推荐先下载代码运行后,大致理解一下项目逻辑,(代码下载在本文最后)。
现在开始我们的快速集成:
1.通过项目结构我们发现 MainActivity类对应程序第一个界面,此界面只有一个按钮用于跳转,CaptureActivity对应二维码扫描界面,ShowActivity用于结果显示,数据交互通过Bundle传递,代码如下(CaptureActivity类中):
具体实现通过:
然后我们可以通过增加扫描框的面积来增加二维码扫描速度,我们知道在二维码扫描过程中,当扫描框全部覆盖二维码时才能扫描到二维码结果,所以我们通过增加扫描框的面积来增加扫描速度是可行的,通过修改com.zf.myzxing.camera包中的CameraManager类的getFramingRect()方法里生成framingRect的参数来修改扫描框面积:代码如下
修改下面的参数即可.
3.如果你想修改扫描界面UI直接在layout里的capture.xml中修改即可,比如添加提示语:
看一下我们的成果 是不是不存在图片拉伸了:
配置完以上四步,我们自己的二维码扫描就完成了,^_^扫描下面的二维码实验一下成果?
代码下载地址
如果你还不清楚ZXing,推荐先阅读此博客: /article/1562143.html
能解决的问题:
<1.教你1分钟集成二维码扫描功能到你的APP里.
<2.解决从其他网站或博客下载的demo发现扫描的时候图片出现拉伸的问题.
<3.解决扫描速度比较慢的问题.
一.首先贴上我们的项目结构图:(此项目是一个月前从CSDN下载解决了图片拉伸问题的代码,并非本人原创)
废话不多说,推荐先下载代码运行后,大致理解一下项目逻辑,(代码下载在本文最后)。
现在开始我们的快速集成:
1.通过项目结构我们发现 MainActivity类对应程序第一个界面,此界面只有一个按钮用于跳转,CaptureActivity对应二维码扫描界面,ShowActivity用于结果显示,数据交互通过Bundle传递,代码如下(CaptureActivity类中):
/** 结果处理 */ public void handleDecode(Result rawResult, Bitmap barcode, float scaleFactor) { inactivityTimer.onActivity(); beepManager.playBeepSoundAndVibrate(); String msg = rawResult.getText(); if (msg == null || "".equals(msg)) { msg = "无法识别"; } Intent intent = new Intent(CaptureActivity.this, ShowActivity.class); Bundle bundle = new Bundle(); bundle.putString("msg", msg); intent.putExtras(bundle); startActivity(intent); }2.如何提高扫描速度我们通过两种方法解决,首先提高相机自动对焦速度,更改com.zf.myzxing.camera包中的AutoFocusManager中的自动对焦间隔时间即可,减小即为缩短自动对焦时间.
private static final long AUTO_FOCUS_INTERVAL_MS = 1000L;
具体实现通过:
private final class AutoFocusTask extends AsyncTask<Object, Object, Object> { @Override protected Object doInBackground(Object... voids) { try { Thread.sleep(AUTO_FOCUS_INTERVAL_MS); } catch (InterruptedException e) { // continue } synchronized (AutoFocusManager.this) { if (active) { start(); } } return null; } }
然后我们可以通过增加扫描框的面积来增加二维码扫描速度,我们知道在二维码扫描过程中,当扫描框全部覆盖二维码时才能扫描到二维码结果,所以我们通过增加扫描框的面积来增加扫描速度是可行的,通过修改com.zf.myzxing.camera包中的CameraManager类的getFramingRect()方法里生成framingRect的参数来修改扫描框面积:代码如下
public synchronized Rect getFramingRect() { if (framingRect == null) { if (camera == null) { return null; } Point screenResolution = configManager.getScreenResolution(); if (screenResolution == null) { // Called early, before init even finished return null; } /* 扫描框修改 */ DisplayMetrics metrics = context.getResources().getDisplayMetrics(); //我们可以通过修改下面width height 里0.8 1.0参数 来改变高和宽 int width = (int) (metrics.widthPixels * 0.8); int height = (int) (width * 1.0); int leftOffset = (screenResolution.x - width) / 2; int topOffset = (screenResolution.y - height) / 4; framingRect = new Rect(leftOffset, topOffset, leftOffset + width, topOffset + height); Log.d(TAG, "Calculated framing rect: " + framingRect); } return framingRect; }
修改下面的参数即可.
int width = (int) (metrics.widthPixels * 0.8); int height = (int) (width * 1.0);
3.如果你想修改扫描界面UI直接在layout里的capture.xml中修改即可,比如添加提示语:
<FrameLayout android:layout_width="match_parent" android:layout_height="match_parent" > <SurfaceView android:id="@+id/preview_view" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <com.zf.myzxing.view.ViewfinderView android:id="@+id/viewfinder_view" android:layout_width="fill_parent" android:layout_height="fill_parent" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="100dp" android:text="请将二维码放入扫描框中" android:layout_gravity="center" android:textColor="#F1F1F1" /> </FrameLayout>4.最后在集成的时候别忘记在AndroidManifest.xml添加权限,以及配置Activity.
看一下我们的成果 是不是不存在图片拉伸了:
配置完以上四步,我们自己的二维码扫描就完成了,^_^扫描下面的二维码实验一下成果?
代码下载地址
相关文章推荐
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android异步下载图片并且缓存图片到本地DEMO详解
- Android项目如何集成ZXing二维码扫描功能(精简、竖屏、解决图像拉伸、工程库形式)
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android人脸识别Demo竖屏YUV方向调整和图片保存
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android 中CheckBox设置background为一张图片并且宽高属性为wrap_content时图片被拉伸
- Android人脸识别Demo竖屏YUV方向调整和图片保存(分享)
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android异步从网络下载图片并且缓存图片到本地的demo
- Android异步从网络下载图片并且缓存图片到本地的demo
- android studio集成极光推送,获取附加字段详细,并提供自己写的一个demo,绝对不是官方demo
- Android调用相机程序和图片处理程序获得原图并且进行图片处理
- android 图片平铺与拉伸
- Android之背景图片设置为重复而不是默认的拉伸
- 使android中圆角图片拉伸不变形的方法
- android图片缩放、放大demo
- Android设置图片为手机壁纸,并且全屏显示。