自己的项目中,只需要修改:

CameraManager 里面的 MAX_FRAME_WIDTH 、MAX_FRAME_HEIGHT 的值
  private static final int MIN_FRAME_WIDTH = 10;
private static final int MIN_FRAME_HEIGHT = 10;
private static final int MAX_FRAME_WIDTH = 800;
private static final int MAX_FRAME_HEIGHT = 800;

原文链接:https://blog.csdn.net/qq_28130037/article/details/51753899

自己改造的Zxing 扩大扫描范围

实现自定义扫描布局 主要是CodeView 里面很详细的代码自定义view

CameraManager里面的四个参数 MIN_FRAME_WIDTH 、MIN_FRAME_HEIGHT、MAX_FRAME_WIDTH、MAX_FRAME_HEIGHT设置中间的扫描框,

你要修改扫描框的大小 然后在CodeView这里面获取扫描框的大小 自己去画一个比扫描框小的框

让用户更好的感觉更快的扫描

在CameraManager里面主要修改

private static final int MIN_FRAME_WIDTH = 240;
private static final int MIN_FRAME_HEIGHT = 240;
private static final int MAX_FRAME_WIDTH = 675;
private static final int MAX_FRAME_HEIGHT = 800;

四个参数的大小修改扫描大小

/**
* Created by smy on 2016/6/23 0023.
* 二维码扫描区域view
*/
public class CodeView extends View {
private Paint paint = null;
private int maskColor;
private int resultColor = 0;
private int frameColor = 0;
private int laserColor = 0;
private int resultPointColor = 0;
private int green = 0;
/**
* 刷新界面的时间
*/
private static final long ANIMATION_DELAY = 10L; /**
* 中间滑动线的最顶端位置
*/
private int slideTop; /**
* 中间滑动线的最底端位置
*/
private int slideBottom;
/**
* 中间那条线每次刷新移动的距离
*/
private static final int SPEEN_DISTANCE = 5; public CodeView(Context context) {
super(context);
init(context);
} public CodeView(Context context, AttributeSet attrs) {
super(context, attrs);
// 初始化这些曾经为性能而不是叫他们在ondraw()每次。
paint = new Paint();
Resources resources = getResources();
maskColor = resources.getColor(R.color.viewfinder_mask);
resultColor = resources.getColor(R.color.result_view);
frameColor = resources.getColor(R.color.viewfinder_frame);
laserColor = resources.getColor(R.color.viewfinder_laser);
resultPointColor = resources.getColor(R.color.possible_result_points);
green = resources.getColor(R.color.text_green); init(context);
} public CodeView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context);
} private void init(Context context) { } @Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//中间的扫描框,你要修改扫描框的大小,去CameraManager里面修改
Rect frame = CameraManager.get().getFramingRect();
if (frame == null) {
return;
}
int width = canvas.getWidth();
int height = canvas.getHeight(); // 画的外部(即外部框架矩形)黑暗
paint.setColor(maskColor);
//
/**
* 想要调节二维码扫描的速度 就要在CameraManager里面调节
* private static final int MIN_FRAME_WIDTH = 240;
private static final int MIN_FRAME_HEIGHT = 240;
private static final int MAX_FRAME_WIDTH = 675;
private static final int MAX_FRAME_HEIGHT = 800;
这四个参数的大小
然后通过Rect frame = CameraManager.get().getFramingRect();获取相机扫描区域的大小
如果只是单纯的用相机的高宽去设置扫描二维码区域会发现扫描比较快 但是二维码扫描区域太大
代码是这样的
// 画的外部(即外部框架矩形)黑暗
paint.setColor(resultBitmap != null ? resultColor : maskColor);
canvas.drawRect(0, 0, width, frame.top, paint);
canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);
canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1, paint);
canvas.drawRect(0, frame.bottom + 1, width, height, paint);
画出了是和相机一样大小的边框
但是如果为了扫描快一些就要调大相机区域 也要重新画出扫描区域
就要自己画一个比相机小的正方形的扫描区域
*/
//画一个方形 获取相机宽度
int x = frame.right - frame.left;
//上面阴影部分高度 x=height-2*top; 算出top
int top = (height - x) / 2;
//获取下面阴影部分的在y轴的坐标
int botton = x + top;
canvas.drawRect(0, 0, width, top, paint);//最上面的一块透明的背景
canvas.drawRect(0, top, frame.left, botton, paint);//左边的一块透明的背景
canvas.drawRect(frame.right + 1, top, width, botton, paint);//右边的一块透明背景
canvas.drawRect(0, botton, width, height, paint);//最下面的一块透明背景 //画四个角上面的绿线
paint.setColor(green);
paint.setStrokeWidth((float) 3.0); //线宽
paint.setStyle(Paint.Style.FILL);
canvas.drawLine(frame.left - 2, top - 2, frame.left + 50, top - 2, paint);//左上角横着的线
canvas.drawLine(frame.left - 2, top, frame.left - 2, top + 50, paint);//左上角竖着的线 canvas.drawLine(frame.left - 2, botton - 50, frame.left - 2, botton, paint);//左下角竖着的线
canvas.drawLine(frame.left - 2, botton + 2, frame.left + 52, botton + 2, paint);//左下角横着的线 canvas.drawLine(frame.right - 50, top - 2, frame.right + 2, top - 2, paint);//右上角横着的线
canvas.drawLine(frame.right + 2, top, frame.right + 2, top + 50, paint);//右上角竖着的线 canvas.drawLine(frame.right + 2, botton - 50, frame.right + 2, botton + 2, paint);//右下角竖着的线
canvas.drawLine(frame.right - 50, botton + 2, frame.right, botton + 2, paint);//右下角横着的线 //绘制中间的线,每次刷新界面,中间的线往下移动SPEEN_DISTANCE
slideTop += SPEEN_DISTANCE;
if (slideTop >= botton) {
slideTop = top;
}
if (slideTop >= top) {
//绘制中间的线
canvas.drawLine(frame.left, slideTop, frame.right, slideTop, paint);//中间的横线
} else {
canvas.drawLine(frame.left, top + x / 2, frame.right, top + x / 2, paint);//中间的横线
} //只刷新扫描框的内容,其他地方不刷新
postInvalidateDelayed(ANIMATION_DELAY, frame.left, top,
frame.right, botton);
}
}

android Zxing 扫描区域的大小设置和自定义扫描view的更多相关文章

  1. Android为TV端助力 最简单的自定义圆点view

    首先创建一个选择器,用来判断圆点状态,可以根本自己的需求改 <selector xmlns:android="http://schemas.android.com/apk/res/an ...

  2. 【转】如何调整visio绘图区域尺寸大小

    原文网址:http://jingyan.baidu.com/article/948f5924033870d80ff5f9f1.html 在使用microsoft visio软件绘图时,为了绘图的质量和 ...

  3. Android Zxing调整扫描区域 优化取图速度

    Zxing 是google提供的二维码扫描project Demo本身默认的扫图区域最大仅仅有 360*480    须要拉开非常远的距离才干将整个二维码扫描到 因此须要我们自己调整取图大小 在Cam ...

  4. Android Zxing框架扫描解决扫描框大小,图片压缩问题

    在我们是Zxing框架进行二维码扫描的时候,会发现,如今手机随着分辨率的添加.那个扫描框会越来越小,在1920*1280和1280*720还算比較正常.可是三星的几款手机note4,5.S6,等几款手 ...

  5. Android—ZXing二维码扫描遇到的问题

    最近工作中需要开发带有二维码扫描功能的软件(基于开源项目ZXing),遇到的问题记录一下,也希望给大家带来帮助. 1.首先因为扫描要开摄像机所以加权限是一定的,不然后面什么都不能进行 <uses ...

  6. Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果

      Android 高手进阶(21)  版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处:http://blog.csdn.net/xiaanming/article/detail ...

  7. 【转】Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果--不错

    原文网址:http://blog.csdn.net/xiaanming/article/details/10163203 转载请注明出处:http://blog.csdn.net/xiaanming/ ...

  8. Android ZXing 二维码、条形码扫描介绍

    本帖最后由 Shims 于 2013-11-9 12:39 编辑 最近公司的Android项目需要用到摄像头做条码或二维码的扫描,Google一下,发现一个开源的 ZXing项目.它提供二维码和条形码 ...

  9. Android Zxing 转换竖屏扫描且提高识别率

    最近的一个Android需要用到扫码功能,用的是Zxing开源库.Zxing的集成就不说了,但是Zxing默认的是横屏扫码,在实际生产中并不适用,需要改为竖屏扫描. 转竖屏步骤: 1>. And ...

随机推荐

  1. TCP/IP_网络基础知识

    今天看到k8s的网络,顿感网络知识不是特别扎实,立马回头补一下Tcp-ip知识,顺便记录下学习的过程: 计算机与网络发展的7个阶段: 批处理时代(计算机按照顺序处理,50年代)->分时系统时代( ...

  2. 使用jQuery编辑删除页面内容,两种方式

    第一种,比较少的编辑用这种,直接在那块内容上编辑,失去焦点即完成 前几天做编辑框的时候,需要只修改一个状态 //编辑角色 function editTr($this){ thatTd=$($this) ...

  3. IntelliJ IDEA tomcat 热部署

    1.点击idea中tomcat设置 2.点击Deployment查看Deploy at the server startup 中tomcat运行的包是 xxxx:war 还是其他,如果是xxx:war ...

  4. 6.简单提取小红书app数据(简单初步试采集与分析)-1

    采集小红书数据爬虫:1.本来是要通过app端的接口去直接采集数据,但是app接口手机端设置本地代理这边开启抓包后就不能正常访问数据.所以就采用了微信小程序里的小红书app接口去采集数据. 2.通过 f ...

  5. requestAnimFrame动画兼容性封装

    window.requestAnimFrame=function(){ return window.requestAnimationFrame ||window.webkitRequestAnimat ...

  6. Python基础1 介绍、基本语法

    ---恢复内容开始--- 本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表 ...

  7. redis 做默认缓存

    配置: server.port= # REDIS (RedisProperties) # Redis\u6570\u636E\u5E93\u7D22\u5F15\uFF08\u9ED8\u8BA4\u ...

  8. HTML5 实现获取 gzip 压缩数据,并进行解压,同时解决汉字乱码,相关 pako.js

    1, 下载 pako.js => http://nodeca.github.io/pako/#Deflate.prototype.onData 2, 首先需要了解一下 XMLHttpReques ...

  9. MiniDao_1.6.4 版本发布,轻量级Java持久化框架,Hibernate项目辅助利器

    MiniDao 简介及特征 MiniDao 是一款超轻量的JAVA持久层框架,具备Mybatis一样的SQL能力: 支持SQL分离.支持标签.支持注解.MiniDao产生的初衷是为了解决Hiberna ...

  10. 行为模式--代理Proxy模式(Java)

    代理(AOP切面的雏形): 题记:顾名思义就是将某件事,某个东西的使用权进行为让授权转移.代理相当于中介(不同于中介者模式),在原本操作的类之间添加了一个桥梁.但代理不能去修改原有目标.比如:一个人要 ...