android ZXing 二维码的实现与demo
来源:互联网 发布:c# 多cpu 编程 编辑:程序博客网 时间:2024/05/19 14:39
android 的二维码实现,现在越来越普遍,每一个app差不多都会拥有自己的二维码,它就像身份的象征,
但是如何实现那?下面我为大家详细的讲解一下。
集成二维码的步骤;
集成默认的二维码扫描页面
1.添加依赖
compile 'cn.yipianfengye.android:zxing-library:2.2'2.在清单文件中添加权限
<uses-permission android:name="android.permission.CAMERA" /><uses-permission android:name="android.permission.VIBRATE"></uses-permission><uses-permission android:name="android.permission.FLASHLIGHT" /><uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" />不要少添加,否则会报错;3.创建一个MyApp,在onCreate()方法中初始化:4.实现二维码扫描ZXingLibrary.initDisplayOpinion(this);
button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, CaptureActivity.class); startActivityForResult(intent, REQUEST_CODE); } });
5.重写onActivityResult()接收扫描结果一个简单的二维码扫描完成了;if (requestCode == REQUEST_CODE) { //处理扫描结果(在界面上显示) if (null != data) { Bundle bundle = data.getExtras(); if (bundle == null) { return; } if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) { String result = bundle.getString(CodeUtils.RESULT_STRING); Toast.makeText(this, "解析结果:" + result, Toast.LENGTH_LONG).show(); } else if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) { Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show(); } } }
二.还可以自定义样式;步骤如下:
- 在新的Activity中定义Layout布局文件
<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_second" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:id="@+id/second_button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="取消" android:layout_marginTop="20dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginBottom="10dp" android:layout_gravity="bottom|center_horizontal" /> <FrameLayout android:id="@+id/fl_my_container" android:layout_width="match_parent" android:layout_height="match_parent" ></FrameLayout></FrameLayout>
启动id为fl_my_container的FrameLayout就是我们需要替换的扫描组件。
- 在Activity中执行Fragment的初始化操作
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); /** * 执行扫面Fragment的初始化操作 */ CaptureFragment captureFragment = new CaptureFragment(); // 为二维码扫描界面设置定制化界面 CodeUtils.setFragmentArgs(captureFragment, R.layout.my_camera); captureFragment.setAnalyzeCallback(analyzeCallback); /** * 替换我们的扫描控件 */ getSupportFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit(); }
其中analyzeCallback是我们定义的扫描回调函数,其具体的定义:
/** * 二维码解析回调函数 */ CodeUtils.AnalyzeCallback analyzeCallback = new CodeUtils.AnalyzeCallback() { @Override public void onAnalyzeSuccess(Bitmap mBitmap, String result) { Intent resultIntent = new Intent(); Bundle bundle = new Bundle(); bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_SUCCESS); bundle.putString(CodeUtils.RESULT_STRING, result); resultIntent.putExtras(bundle); SecondActivity.this.setResult(RESULT_OK, resultIntent); SecondActivity.this.finish(); } @Override public void onAnalyzeFailed() { Intent resultIntent = new Intent(); Bundle bundle = new Bundle(); bundle.putInt(CodeUtils.RESULT_TYPE, CodeUtils.RESULT_FAILED); bundle.putString(CodeUtils.RESULT_STRING, ""); resultIntent.putExtras(bundle); SecondActivity.this.setResult(RESULT_OK, resultIntent); SecondActivity.this.finish(); } };
你自定义样式的布局
my_camera<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="fill_parent" android:layout_height="fill_parent" > <SurfaceView android:id="@+id/preview_view" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <com.uuzuche.lib_zxing.view.ViewfinderView android:id="@+id/viewfinder_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:inner_width="200dp" app:inner_height="200dp" app:inner_margintop="150dp" app:inner_corner_color="@color/scan_corner_color" app:inner_corner_length="30dp" app:inner_corner_width="5dp" app:inner_scan_bitmap="@drawable/scan_image" app:inner_scan_speed="10" app:inner_scan_iscircle="false" /></FrameLayout>
可以发现其主要的区别就是在自定义的扫描控件中多了几个自定义的扫描框属性:
<declare-styleable name="innerrect"> <attr name="inner_width" format="dimension"/><!-- 控制扫描框的宽度 --> <attr name="inner_height" format="dimension"/><!-- 控制扫描框的高度 --> <attr name="inner_margintop" format="dimension" /><!-- 控制扫描框距离顶部的距离 --> <attr name="inner_corner_color" format="color" /><!-- 控制扫描框四角的颜色 --> <attr name="inner_corner_length" format="dimension" /><!-- 控制扫描框四角的长度 --> <attr name="inner_corner_width" format="dimension" /><!-- 控制扫描框四角的宽度 --> <attr name="inner_scan_bitmap" format="reference" /><!-- 控制扫描图 --> <attr name="inner_scan_speed" format="integer" /><!-- 控制扫描速度 --> <attr name="inner_scan_iscircle" format="boolean" /><!-- 控制小圆点是否展示 --> </declare-styleable>
在githup上有我已经为大家完成的默认样式二维码扫描,如果有想要自定义样式的,添加我关注,并且评论告诉我。
二维码集成demo地址:
https://github.com/benyondall/android-Zxing.git
阅读全文
3 0
- android ZXing 二维码的实现与demo
- android studio 利用zxing实现二维码扫描附demo
- ZXing实现二维码的生成与解析
- Android集成Zxing实现二维码的扫描与生成(含动态权限)
- 编译google Zxing,实现安卓一、二维码的扫描与生成
- Android基于Google Zxing实现二维码、条形码的扫
- android使用Zxing库实现二维码的生成
- Android 使用Zxing实现二维码的生成,扫描
- Android 使用Zxing实现二维码的生成,扫描
- Android 使用Zxing实现二维码的生成,扫描
- Android开发之利用ZXing库实现二维码的生成
- Android开发之利用ZXing库实现二维码的扫描
- Android 基于Zxing二维码扫描的光速实现
- Android 使用Zxing实现二维码的生成,扫描
- Android二维码的生成与扫码-zxing
- Android集成ZXing二维码扫描,附加竖屏并且不拉伸图片的demo
- zxing实现生成二维码与解析
- 使用Zxing实现Android二维码扫描
- windows adb不识别(VID PID更改)
- thinkjs 文件上传
- Apache安装apr和apr-util作用
- 学编程以来第一次遇到的灵异事件
- 看风听雨之自学编程之动态库
- android ZXing 二维码的实现与demo
- java基础-02java运算符与分支结构
- 用正则表达式提取Cookie值
- linux系统redis数据库
- CS231N 笔记2_损失函数和优化器
- ORA-12514 TNS:listener does not currently know of service requested in connect descriptor报错解决
- ECharts详解
- 【codevs 4510】神奇的幻方
- Java修饰符 abstract,static,final 的区别详解