android Zxing 扫描区域的大小设置和自定义扫描view
自己的项目中,只需要修改:
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的更多相关文章
- Android为TV端助力 最简单的自定义圆点view
首先创建一个选择器,用来判断圆点状态,可以根本自己的需求改 <selector xmlns:android="http://schemas.android.com/apk/res/an ...
- 【转】如何调整visio绘图区域尺寸大小
原文网址:http://jingyan.baidu.com/article/948f5924033870d80ff5f9f1.html 在使用microsoft visio软件绘图时,为了绘图的质量和 ...
- Android Zxing调整扫描区域 优化取图速度
Zxing 是google提供的二维码扫描project Demo本身默认的扫图区域最大仅仅有 360*480 须要拉开非常远的距离才干将整个二维码扫描到 因此须要我们自己调整取图大小 在Cam ...
- Android Zxing框架扫描解决扫描框大小,图片压缩问题
在我们是Zxing框架进行二维码扫描的时候,会发现,如今手机随着分辨率的添加.那个扫描框会越来越小,在1920*1280和1280*720还算比較正常.可是三星的几款手机note4,5.S6,等几款手 ...
- Android—ZXing二维码扫描遇到的问题
最近工作中需要开发带有二维码扫描功能的软件(基于开源项目ZXing),遇到的问题记录一下,也希望给大家带来帮助. 1.首先因为扫描要开摄像机所以加权限是一定的,不然后面什么都不能进行 <uses ...
- Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果
Android 高手进阶(21) 版权声明:本文为博主原创文章,未经博主允许不得转载. 转载请注明出处:http://blog.csdn.net/xiaanming/article/detail ...
- 【转】Android 基于google Zxing实现二维码、条形码扫描,仿微信二维码扫描效果--不错
原文网址:http://blog.csdn.net/xiaanming/article/details/10163203 转载请注明出处:http://blog.csdn.net/xiaanming/ ...
- Android ZXing 二维码、条形码扫描介绍
本帖最后由 Shims 于 2013-11-9 12:39 编辑 最近公司的Android项目需要用到摄像头做条码或二维码的扫描,Google一下,发现一个开源的 ZXing项目.它提供二维码和条形码 ...
- Android Zxing 转换竖屏扫描且提高识别率
最近的一个Android需要用到扫码功能,用的是Zxing开源库.Zxing的集成就不说了,但是Zxing默认的是横屏扫码,在实际生产中并不适用,需要改为竖屏扫描. 转竖屏步骤: 1>. And ...
随机推荐
- TessorFlow学习 之 序言
2017.10.23日记录: 感觉平时自己学的还不错的,可是面试的时候才发现自己是个渣渣~~,真的感觉学习不能闭门造车! 面试了图像处理算法工程师-->> 1.精通哪门语言?C.C++.P ...
- 好久没玩docker了,温下手
好久没玩docker了,温下手 安装 Docker Docker 软件包已经包括在默认的 CentOS-Extras 软件源里.因此想要安装 docker,只需要运行下面的 yum 命令: yum i ...
- 4. mysql 1449 : The user specified as a definer ('test'@'%') does not exist 解决方法
权限问题,授权 给 root 所有sql 权限 mysql> grant all privileges on *.* to test@"%" identified by & ...
- 10.Linux 管道
简单地说,一个通道接受一个工具软件的输出,然后把那个输出输入到其它工具软件.使用UNIX/Linux的词汇,这个通道接受了一个过程的标准输出,并把这个标准的输出作为另一个过程的标准输入.如果你没有重新 ...
- C++中多态中构造函数与析构函数的调用
做个实验,看一下成员变量的构造析构,父类子类的构造析构,以及虚函数对调用的影响. #include <iostream> using namespace std; class Member ...
- NetBeans 8以后版本无法连接git服务器
因为目前的git服务器的密钥加密基本都是256位的,而NetBeans带的jre环境的加密限制在基本的128位加密,从而导致无法和git服务器通信 解决办法 下载Java Cryptography E ...
- webstorm上svn的安装使用
1.首先要下载SlikSvn网址为:https://sliksvn.com/download/ 进入该网站可以根据需要下载32位的或者64位的svn.下图为要下载的图标样式 点击下载即可. 2.在w ...
- Tomcat命令
如果原始内存不够用经常内存溢出,可以在catalina.bat中设置: 电脑2G内存的情况 :set JAVA_OPTS='-server -Xms1024m -Xmx1536m -XX:PermSi ...
- git安装与基本命令
一.前言 GibHub的名字源于Git,Git是一个分布式版本控制系统,让程序员团队能够协作开发项目,Git帮助大家管理为项目所做的工作,避免一个人所做的修改影响其他人所做的修改.你在项目中实现一个新 ...
- upcast
class A { public: A():i(){} int get_i() { cout << "A.get_i" << endl; return i; ...