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 ...
随机推荐
- 【IP代理】国内省市域名代理
最近遇到一个测试问题,就是投放时需要按地域投放,所以需要对指定的IP地址范围内的地方投放才有效. 所以,就调查了下IP代理的方式,一个是SSR,这个好像只能代理国外的域名方式,另外一个就是百度搜索IP ...
- python读取grib grib2气象数据
如何读取GRIB数据?快看Python大神整理的干货! 橙子心法 百家号17-11-0116:30 GRIB是WMO开发的一种用于交换和存储规则分布数据的二进制文件格式,主要用来表示数值天气预报的产品 ...
- C++动态时间显示
#include <iostream> #include<stdlib.h> #include<windows.h> #include<string> ...
- kotlin学习(二)——类
Kotlin中的类遵循一个简单的结构.尽管与Java有一点细微的差别.你可以使用try.kotlinlang.org在不需要一个真正的项目和不需要部署到机器的前提下来测试一些简单的代码范例. 1. 怎 ...
- swfupload文件上传配置文件大小
在配置文件中加入: <system.web> <httpRuntime executionTimeout="36000" maxRequestLe ...
- Mysql 隐式转换
表定义: CREATE TABLE `ids` ( id ) not null auto_increment, PRIMARY KEY (id) ); 表中存在一些IDs: 111, 112, 113 ...
- dev16 cxgrid 在DLL里报0地址错
dev16 cxgrid 在DLL里Form里使用,报0地址错,在EXE里正常.c++builder 的DLL报错,delphi也报错. First chance exception at $09CE ...
- hIve—timestamp时间戳问题
先查看表 timestamp可以转换为标准的时间(精确到秒);https://tool.lu/timestamp/ 这个时间格式用处很多: 多个时间可以使用函数,来切换. 每个用户 产生行为的时候,用 ...
- NSMapTable
跟NSDictionary用法差不多,不过区别是NSMapTable可以设置内存选项,例如可以设置key跟value的内存属性(weak/strong),从而避免内存泄露. 例如这个+ weakToW ...
- linux 常用命令记录&& xsheel 使用记录
cp -r x1 x2 复制文件x1到x2 ls 当前目录下的文件列表 ll ...