android 条码扫描控件,Android Zxing条码扫描自定义控件(附代码)
团队要做一个项目,里面要用到条码扫描,搜了一下,知道了Zxing。这是一个开源的条码扫描程序。官方网站有完整的Android程序可下载。但是,如果想将扫描功能融合在自己开发的程序里,则需要理清设计的思路,并去掉一些没有必要的代码。
为了让团队更方便使用,我将Zxing代码做了封装,做成了一个自定义View控件,并且生成了jar文件,可以在Android程序里直接引用。这个控件解决了不少网友询问的竖屏和横屏摆放的问题。
使用该控件很简单。首先要在项目目录下,建一个libs目录,将ZxingScanner.jar文件放进去。
然后建立项目引用,如下步骤:
1.通过Eclipse菜单Project->Properties->Java Build Path->Libraries,点击Add library;
2.选择User Library ,点击Next,点击User Library,点击New,输入随意的Library Name,比如ZxingScanner;
3.选择刚才创建的Library Name,点击Add JARs,找到libs目录下的ZxingScanner.jar,加入;
4.在Java Build Path的Libraries窗口中,就应该有这个带上了ZxingScanner.jar的library了。
因为扫描要用到相机,所以接着要设置AndroidManifest.xml,在里面加入使用相机的权限。
建议将控件放在一个横屏的Activity里,这样的话,由于扫描框的宽度大于高度,扫描条码时,可以将手机比较靠近条码。将Activity设为横屏大家都应该会了,但我还是附上代码吧,其实就是在AndroidManifest.xml的activity标签里加上下面这一句:
android:id="@+id/scanner_view"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
这样,当activity打开时,会看到控件占据的区域内是相机影像,只要将中间的框对准条码,框中间的红线压住条码,就能识别。
别急,activity中还是要写一些代码的。
我定义的activity叫ZXingScannerActivity,它的作用是将控件识别的条码显示在一个TextView(txtResult)上。代码如下:
packagecom.covics.zxingscanner;
importandroid.app.Activity;
importandroid.graphics.Bitmap;
importandroid.os.Bundle;
importandroid.widget.TextView;
importandroid.widget.LinearLayout;
importandroid.widget.FrameLayout.LayoutParams;
importcom.covics.zxingscanner.ScannerView;
importcom.covics.zxingscanner.R;
//activity需要实现com.covics.zxingscanner.OnDecodeCompletionListener接口
publicclassZXingScannerActivityextendsActivityimplementsOnDecodeCompletionListener{
privateScannerView scannerView;
privateTextView txtResult;
/** Called when the activity is first created. */
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
scannerView=(ScannerView)findViewById(R.id.scanner_view);
txtResult = (TextView) findViewById(R.id.txtResult);
//条码扫描后回调自己的onDecodeCompletion
scannerView.setOnDecodeListener(this);
}
//将条码扫描识别结果打印在textview上,barcodeFormat是条码格式,barcode是条码内容,bitmap是条码图像
@Override
publicvoidonDecodeCompletion(String barcodeFormat,String barcode,Bitmap bitmap){
txtResult.setText("Barcode Format:"+barcodeFormat+" Barcode:"+barcode);
}
@Override
protectedvoidonResume() {
super.onResume();
//onResume时才打开相机和闪光灯
scannerView.onResume();
}
@Override
protectedvoidonPause() {
super.onPause();
//onPause时关闭相机和闪光灯
scannerView.onPause();
}
@Override
protectedvoidonDestroy() {
super.onDestroy();
}
}
使用上就这么简单。
下面简单介绍一下ScannerView的实现原理。它扩展自FrameLayout,里面加入了一个SurfaceView和另一个扩展的View(ViewfinderView)。
SurfaceView用于显示相机的图像,通过将SurfaceView的surfaceholder传入相机对象,就能将相机的图像显示出来。
而ViewfinderView则是覆盖在SurfaceView上面,通过onDraw方法,画出中间一个框是全透明,其余区域是半透明的效果,让用户明白,通过中间全透明框取景。
扫描的原理:
CaptureActivityHandler 作为一个 handler,不断让相机自动对焦,并驱动相机获取preview图像,一旦获得preview图像,就传入给独立线程DecodeThread的 handler,有该handler负责将取景框部分的图像获取后,调用Zxing进行解码,如果解码成功,则通知ScannerView,将结果传给实现了OnDecodeCompletionListener接口的对象。
附件有两个内容:
1.ScannerView的项目源代码ZXingScanner
2.演示使用ScannerView的项目ZxingScanner Demo
android 条码扫描控件,Android Zxing条码扫描自定义控件(附代码)相关推荐
- android 自定义switch控件,Android中switch自定义样式
android 原生开关按钮控件 Switch 提供样式自定义方式,可供我们修改为适合我们开发使用的样式控件,自定义样式过程如下: 自定义switch切换drawable 新建swith_thumb. ...
- android 自定义view控件,Android 自定义View——自定义View控件
Android给我们提供了大量的View控件,但这还是远远满足不了我们的要求,有时候开发所需要的控件形式是在Android提供的控件中是不存在,这就需要我们自己去定义一个.那么如何自定义控件? 学习自 ...
- android studio 画控件,Android Studio 基础控件使用
TextView android:gravity="center" //文字对其方式 top bottom left right center android:textColor= ...
- android 圆环温度控件,Android自定义View分享——一个圆形温度显示器
写在前面 笔者近来在学习Android自定义View,收集了一些不算复杂但又"长得"还可以的自定义View效果实现,之前分享过一个水平的进度条,如果你有兴趣的话可以看看: Andr ...
- android基础ui控件,Android基础——基础UI控件
日历,时钟,计时器 package com.example.mybaseuii; import androidx.appcompat.app.AppCompatActivity; import and ...
- android开发重要控件,Android界面编程——Android基本控件
Android界面编程 Android应用开发的一项重要内容就是界面开发.对于用户来说,不管APP包含的逻辑多么复杂,功能多么强大,如果没有提供友好的图形交互界面,将很难吸引最终用户. 作为一个程序员 ...
- android 自定义刷新控件,Android开发中MJRefresh自定义刷新动画效果
有时候我们对自己开发的项目经常不满意,但是我们要达到自定义刷新动画的效果有一定的难度,别着急,下面爱站技术频道和大家分享Android开发中MJRefresh自定义刷新动画效果,一起来学习吧! [一] ...
- android显示网络图片控件,Android控件之ImageView(二)
前言 在上一篇文章中,我们讲解了如何加载本地图片,那么在实际项目中 ImageView 大多数使用场景是加载网络图片,网络图片其实就是存储在服务器上的文件,我们需要从服务器获取到文件的二进制输入流 I ...
- android studio开关控件,Android studio实现滑动开关
大家好,今天刚学会使用Android Studio实现滑动开关的效果,自己感觉还可以,和大家分享一下,如果觉得可以的可以拿去,然后再给我点个赞,谢谢.本人也是学Android studiok开发不久, ...
最新文章
- eclipse中运行c++控制台没输出
- 对象创建方法,对象的内存分配,对象的访问定位
- 【五校联考7day2】QYQ的图
- navicat创建计算列_Tableau Part 9 计算字段amp;粒度聚合比率amp;表计算
- 缓存优化过程中的一些思考
- html框架里面怎么填写内容_还不会Python高级框架?进来,速学
- Ubuntu8.04系列二-系统优化篇
- 用汇编的眼光看C++(之 总结篇)
- 爱情智慧:从恋爱走向婚姻必备的理念
- WebSphere安装配置文档
- 44.android 简单的白天与夜晚模式切换
- win11家庭版如何彻底关闭病毒实时保护
- 基于springboot的手办定制销售系统毕业设计源码031800
- 统计学习方法第三章 k近邻法
- 数学建模竞赛【必须要掌握的十个算法】
- 如何理解Liveupdate Administrator (LUA) 下SEP的更新文件
- 有几种水果不能空腹吃,你知道吗?
- 2019-02-28 阴
- 计算机2 游戏攻略,史上最坑爹的游戏2全关卡游戏攻略大全
- 《深度学习进阶 自然语言处理》书籍介绍
热门文章
- 2022年,图机器学习Graph ML发展到哪了?
- 环形博弈 HDU - 3951
- 读书笔记——计算机组成原理
- Leetcode每日一题:50.powx-n
- Leetcode每日一题:33.search-in-rotated-sorted-array(搜索旋转排序数组)
- 最短路径 自己写的一个很简单的模板 dijkstra算法
- 花书+吴恩达深度学习(十六)序列模型之双向循环网络 BRNN 和深度循环网络 Deep RNN
- Vue-CLI 3.x 自动部署项目至服务器
- GitOps:Weaveworks通过开发者工具实现CI/CD
- Android NDK开发:打包so库及jar包供他人使用