Github项目解析(十)-->快速集成二维码扫描库

  本文将讲解一下我最近写的一个快速集成二维码扫描库,这里需要说明的是其核心的实现扫描的功能,是通过调用ZXing库实现的。内部App中使用到了二维码扫描功能,但是网上找了一些关于二维码扫描的例子,只是我在集成的时候发现通过android studio集成zxing二维码库不是特别方便,由于我就有了将其制作成标准库的想法,也就有了本文即快速集成二维码扫描库。

  本文的项目地址是在: android-zxingLibrary ,欢迎star和follow。

  使用方式:

  集成默认的二维码扫描页面

  在具体介绍该扫描库之前我们先看一下其具体的使用方式,看看是不是几行代码就可以集成二维码扫描的功能。

  在module的build.gradle中执行compile操作

  compile 'cn.yipianfengye.android:zxing-library:1.1'

  在代码中执行打开扫描二维码界面操作

  /**

  * 打开默认二维码扫描界面

  */

  button1.setOnClickListener(new View.OnClickListener() {

[email protected]

  public void alt="物联网" width="320" height="565" />

  但是这样的话是不是太简单了,如果我想选择图片解析呢?别急,对二维码图片的解析也是支持的

  集成对二维码图片的解析功能

  调用系统API打开图库

  Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

  intent.addCategory(Intent.CATEGORY_OPENABLE);

  intent.setType("image/*");

  startActivityForResult(intent, REQUEST_IMAGE);

  在Activity的onActivityResult方法中获取用户选中的图片并调用二维码图片解析API

  if (requestCode == REQUEST_IMAGE) {

  if (data != null) {

  Uri uri = data.getData();

  ContentResolver cr = getContentResolver();

  try {

  Bitmap mBitmap = MediaStore.Images.Media.getBitmap(cr, uri);//显得到bitmap图片

  CodeUtils.analyzeBitmap(mBitmap, new CodeUtils.AnalyzeCallback() {

[email protected]

  public void alt="物联网" width="320" height="565" />

  有了默认的二维码扫描界面,也有了对二维码图片的解析,可能有的同学会说如果我想定制化显示UI怎么办呢?没关系也支持滴。

  定制化显示扫描UI

  由于我们的扫描组件是通过Fragment实现的,所以能够很轻松的实现扫描UI的定制化。

  在新的Activity中定义Layout布局文件

  

  

  android:id="@+id/activity_second"

  android:layout_width="match_parent"

  android:layout_height="match_parent">

  <button< p="">

  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< p="">

  android:id="@+id/fl_my_container"

  android:layout_width="match_parent"

  android:layout_height="match_parent"

  >

  

  启动id为fl_my_container的FrameLayout就是我们需要替换的扫描组件,也就是说我们会将我们定义的扫描Fragment替换到id为fl_my_container的FrameLayout的位置。而上面的button是我们添加的一个额外的控件,在这里你可以添加任意的控件,各种UI效果等。具体可以看下面在Activity的初始化过程。

  在Activity中执行Fragment的初始化操作

[email protected]

  protected void encoding="utf-8"?-->

  

  xmlns:app="http://schemas.android.com/apk/res-auto"

  android:layout_width="fill_parent"

  android:layout_height="fill_parent" >

  <surfaceview< p="">

  android:id="@+id/preview_view"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  />

  <com.uuzuche.lib_zxing.view.viewfinderview< p="">

  android:id="@+id/viewfinder_view"

  android:layout_width="wrap_content"

  android:layout_height="wrap_content"

  app:inner_width="180"

  app:inner_height="180"

  app:inner_margintop="180"

  />

  

  上面我们自定义的扫描控件的布局文件,下面我们看一下默认的扫描控件的布局文件: