修正Android基于ZXing的二维码扫描——横竖屏自由切换

概述:

此博客是基于开源的框架ZXing。ZXing用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。ZXing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。该项目可实现的条形码编码和解码。

资源下载:

http://download.csdn.net/detail/u013761665/8853561

修改为竖屏显示:

第1步:

进入com.google.zxing.client.android包下的CaptureActivity类:

注释以下代码:

if (prefs.getBoolean(PreferencesActivity.KEY_DISABLE_AUTO_ORIENTATION, true)) {
            setRequestedOrientation(getCurrentOrientation());
        } else {
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
        }

第2步:

进入com.google.zxing.client.android包下的DecodeHandler类:

在代码

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; // Here we are swapping, that's the difference to #11
            width = height;
            height = tmp;
            data = rotatedData;

第3步:

进入com.google.zxing.client.android.camera包下的CameraConfigurationManager类:

在Log.i(TAG, "Screen resolution: " + screenResolution)的下面添加:

Point screenResolutionForCamera = new Point();
screenResolutionForCamera.x = screenResolution.x;
screenResolutionForCamera.y = screenResolution.y;
if (screenResolution.x < screenResolution.y) {
    screenResolutionForCamera.x = screenResolution.y;
    screenResolutionForCamera.y = screenResolution.x;
}
cameraResolution = CameraConfigurationUtils.findBestPreviewSizeValue(parameters, screenResolutionForCamera);

第4步:

进入com.google.zxing.client.android.camera包下的CameraConfigurationManager类:

在代码camera.setParameters(parameters)的上面添加:

camera.setDisplayOrientation(90);

第5步:

进入com.google.zxing.client.android.camera包下的CameraManager类:

将代码:

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;

横竖屏自由切换:

上面的5步操作会让原本横屏扫描变为竖屏扫描。不过只能是一个方向上的。如果你想让用户可以在横屏和竖屏两种情况下都能使用的话,就要做一些必要的处理了。

主要的思路就是,设置一个标志位Flag来标志当前的横竖屏状态。Flag是在扫描界面CaptureActivity的onResume的时候进行变换,并对外提供getter接口。不过在我的代码中还用到了一点就是使用EventBus框架来发布信息。

横竖屏情况下的对比图:

竖屏

横屏

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-15 12:58:16

修正Android基于ZXing的二维码扫描——横竖屏自由切换的相关文章

【转】Android手机客户端关于二维码扫描的源码--不错

原文网址:https://github.com/SkillCollege/QrCodeScan QrCodeScan 这是Android手机客户端关于二维码扫描的源码,使用了高效的ZBar解码库,并修复了中文乱码. 融合了ZXing代码(使用其中的相机管理功能). 一. 使用开源ZXing扫描的缺点 1.原始代码是横屏模式,尽管可以改成竖屏,但是扫描界面的自定义和多屏幕适配不好做 2.有效扫描区域不好控制,可能是我自己技术不成熟,没找到好方法 3.ZXing是Java写的,对二维码的解析效率没有

基于ZXing的二维码,你可以这样改造它

概述: 如果你下载了ZXing的源码和ZXing的core.jar包,那么你现在就可以进行如下的一系列修改来自定义你的二维码扫描了. 1.修改横竖屏 这一步其实是相对来说还是比较复杂的.因为这里需要针对两个不同方面进行修改,一个是横竖屏的切换,另一个是图像伸缩的修改. (1)修改Manifest中CaptureActivity类的属性为android:screenOrientation="sensor" (2)修改CaptureActivity类,在onResume方法中调用下面的代码

基于Zxing的二维码、条形码的扫描以及二维码的生成(简洁高效)

效果图: 条形码扫描: 二维码扫描: 二维码生成: 项目结构: 这个项目很简单,就2个类,一个jar包和一些依赖,十分简洁. 主要代码: public class MainActivity extends AppCompatActivity implements View.OnClickListener { private TextView resultTV; private ImageView resultIV; private EditText strET; @Override protec

【IOS】集成zxing(二维码扫描)

现在zxing已经到了2.2版本,以前的集成方式出了点问题.下面我做出一点修正.以前的版本的集成方法,参考:http://blog.devtang.com/blog/2012/12/23/use-zxing-library/按照以前的方式做好后  然后就是适配以下现在的版本的修改1.增加   SenTestingKit  框架 设置为Optional2.把目录 iphone/ZXingWidget 下的Tests删了3.保留目录 cpp/core/src 的bigint文件最后提醒:  设置查找

Google zxing实现二维码扫描完美解决方案

最近因项目需求,需要在App中集成二维码扫描的功能.网上找了很多资料,最后决定使用Google的zxing来实现.实现的过程遇到了很多的坑,也是因为这些坑在网上没有具体的解决方案,今天就把我的实现过程分享给大家. 我会分为两步来和大家分享: (1)项目中如何集成zxing (2)如何修改取景框的样式 (3)总结填坑 1.项目中集成zxing 在项目中集成zxing,网上有很多的教程也说的比较详细了,zxing中的内容很多,涵盖了很多的扫码功能(不仅仅局限于扫描二维码...).步骤很简单,只需要我

iOS中 基于LBXScan库二维码扫描 韩俊强的博客

每日更新关注:http://weibo.com/hanjunqiang  新浪微博 首先声明这个二维码扫描是借助于zxing. 功能模块都完全封装好了,不过界面合你口味,直接使用就好,如果不合口味,后面告诉你怎么修改. - 1.cocoaPods导入pod 'LBXScan', '~> 1.1.1' 导入方法看这: - 2.将JQScan文件夹拖到你的工程中(这个是写好的). <code class="language-Objective-C hljs objectivec has-

Android -- 采用zxing生成二维码

首先在grandle里面添加zxing的库引用 compile 'com.google.zxing:core:3.1.0' 生成二维码静态类,返回一张二维码的Bitmap public class QrCodeUtil { // 生成QR图 public static Bitmap getQrCodeImage(int QR_WIDTH, int QR_HEIGHT, String text) throws WriterException { try { // 需要引入core包 QRCodeW

Android 使用zxing生成二维码的方法

public void createQRImage(String url) { try { // 判断URL合法性 if (url == null || "".equals(url) || url.length() < 1) { return; } Hashtable<EncodeHintType, String> hints = new Hashtable<EncodeHintType, String>(); hints.put(EncodeHintTy

java学习-zxing生成二维码矩阵的简单例子

这个例子需要使用google的开源项目zxing的核心jar包 core-3.2.0.jar 可以百度搜索下载jar文件 也可使用maven添加依赖 <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.0</version> </dependency> 最简单的生成二维码的方法,