ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android扫描zxing定制化界面实现扫描和图片解析定制ui

2019-09-21 15:04:23  阅读:260  来源: 互联网

标签:Toast CodeUtils 扫描 bundle zxing Intent RESULT new 定制


这里我用的zxing封装后的框架

https://github.com/yipianfengye/android-zxingLibrary

这是基本的使用:
1.compile ‘cn.yipianfengye.android:zxing-library:2.2’ 然后sync一下
2.在Application的OnCreate方法中加入:

 ZXingLibrary.initDisplayOpinion(this);

3.在需要掉起这个功能的地方加入:

Intent intent = new Intent(MainActivity.this, CaptureActivity.class);
               startActivityForResult(intent, REQUEST_CODE);

然后在该Activity重写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();
               }
           }
       }

4.解析图片:

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() {
                        @Override
                        public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
                            Toast.makeText(MainActivity.this, "解析结果:" + result, Toast.LENGTH_LONG).show();
                        }

                        @Override
                        public void onAnalyzeFailed() {
                            Toast.makeText(MainActivity.this, "解析二维码失败", Toast.LENGTH_LONG).show();
                        }
                    });

                    if (mBitmap != null) {
                        mBitmap.recycle();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }

当然也可以选择相册图片进行解析:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/*");
startActivityForResult(intent, REQUEST_IMAGE);

5.定制化扫描界面:这个库的扫描组件是fragment,所以我们就是在自己的定制化的界面中加入自己的风格和控件然后留一个framelayout来给库的扫描留位置.
步骤1:在定制化的Activity中留一个fragment,这里我们可以就定制一个按钮

<?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>

步骤2:将zxing库里的扫描fragment new出来然后替换那个framelayout的id

 CaptureFragment captureFragment = new CaptureFragment();
        // 为二维码扫描界面设置定制化界面
        CodeUtils.setFragmentArgs(captureFragment, R.layout.my_camera);
        
        captureFragment.setAnalyzeCallback(analyzeCallback);
        /**
         * 替换我们的扫描控件
         */ getSupportFragmentManager().beginTransaction().replace(R.id.fl_my_container, captureFragment).commit();

步骤3:扫描的回调函数:

/**
    * 二维码解析回调函数
    */
   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();
       }
   };

如果还是不满意ui,可以下载该github的项目然后将lib-zxing module导入你的项目,然后进行修改.
这个库还可以生成带/不带logo的二维吗图片

标签:Toast,CodeUtils,扫描,bundle,zxing,Intent,RESULT,new,定制
来源: https://blog.csdn.net/kururunga/article/details/101106864

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有