Android扫描zxing定制化界面实现扫描和图片解析定制ui
16lz
2021-01-25
这里我用的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"?>
步骤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的二维吗图片
更多相关文章
- android跳转微信指定公众号界面
- Android扩展 - 拍照篇(Camera)
- android 自定义信息提示框
- Android设置图片圆角的方法
- 关于android创建快捷方式会启动两个应用的问题(一)
- 用户界面View之ProgressBar
- Android(安卓)背景图片重复平铺 Background repeat
- Android(安卓)WakeLock 使用总结
- 动态显示带图片列表【Android】