ZBar扫码
来源:互联网 发布:华为抢购软件神器 编辑:程序博客网 时间:2024/04/25 02:39
引用的库
barcodescanner
引入jar和jni文件,文件结构为
修改布局
- ViewFinderView的updateFramingRect方法更改扫码框大小
// width = findDesiredDimensionInRange(PORTRAIT_WIDTH_RATIO,// viewResolution.x, MIN_FRAME_WIDTH, PORTRAIT_MAX_FRAME_WIDTH);// height = findDesiredDimensionInRange(PORTRAIT_HEIGHT_RATIO,// viewResolution.y, MIN_FRAME_HEIGHT, PORTRAIT_MAX_FRAME_HEIGHT); width = (int) (496.0 / 720 * getWidth()); height = width;int leftOffset = (viewResolution.x - width) / 2; int topOffset = (viewResolution.y - height) / 3;
- 更改四个角
public void drawViewFinderBorder(Canvas canvas) {// canvas.drawLine(mFramingRect.left - 1, mFramingRect.top - 1,// mFramingRect.left - 1, mFramingRect.top - 1 + mBorderLineLength, mBorderPaint);// canvas.drawLine(mFramingRect.left - 1, mFramingRect.top - 1,// mFramingRect.left - 1 + mBorderLineLength, mFramingRect.top - 1, mBorderPaint);//// canvas.drawLine(mFramingRect.left - 1, mFramingRect.bottom + 1,// mFramingRect.left - 1, mFramingRect.bottom + 1 - mBorderLineLength, mBorderPaint);// canvas.drawLine(mFramingRect.left - 1, mFramingRect.bottom + 1,// mFramingRect.left - 1 + mBorderLineLength, mFramingRect.bottom + 1, mBorderPaint);//// canvas.drawLine(mFramingRect.right + 1, mFramingRect.top - 1,// mFramingRect.right + 1, mFramingRect.top - 1 + mBorderLineLength, mBorderPaint);// canvas.drawLine(mFramingRect.right + 1, mFramingRect.top - 1,// mFramingRect.right + 1 - mBorderLineLength, mFramingRect.top - 1, mBorderPaint);//// canvas.drawLine(mFramingRect.right + 1, mFramingRect.bottom + 1,// mFramingRect.right + 1, mFramingRect.bottom + 1 - mBorderLineLength, mBorderPaint);// canvas.drawLine(mFramingRect.right + 1, mFramingRect.bottom + 1,// mFramingRect.right + 1 - mBorderLineLength, mFramingRect.bottom + 1, mBorderPaint); canvas.drawRect(mFramingRect.left, mFramingRect.top, mFramingRect.left + screenRate, mFramingRect.top + CORNER_WIDTH, mLaserPaint); canvas.drawRect(mFramingRect.left, mFramingRect.top, mFramingRect.left + CORNER_WIDTH, mFramingRect.top + screenRate, mLaserPaint); canvas.drawRect(mFramingRect.right - screenRate, mFramingRect.top, mFramingRect.right, mFramingRect.top + CORNER_WIDTH, mLaserPaint); canvas.drawRect(mFramingRect.right - CORNER_WIDTH, mFramingRect.top, mFramingRect.right, mFramingRect.top + screenRate, mLaserPaint); canvas.drawRect(mFramingRect.left, mFramingRect.bottom - CORNER_WIDTH, mFramingRect.left + screenRate, mFramingRect.bottom, mLaserPaint); canvas.drawRect(mFramingRect.left, mFramingRect.bottom - screenRate, mFramingRect.left + CORNER_WIDTH, mFramingRect.bottom, mLaserPaint); canvas.drawRect(mFramingRect.right - screenRate, mFramingRect.bottom - CORNER_WIDTH, mFramingRect.right, mFramingRect.bottom, mLaserPaint); canvas.drawRect(mFramingRect.right - CORNER_WIDTH, mFramingRect.bottom - screenRate, mFramingRect.right, mFramingRect.bottom, mLaserPaint); }
- 中间的扫描线
public void drawLaser(Canvas canvas) { // Draw a red "laser scanner" line through the middle to show decoding is active// mLaserPaint.setAlpha(SCANNER_ALPHA[scannerAlpha]);// scannerAlpha = (scannerAlpha + 1) % SCANNER_ALPHA.length;// int middle = mFramingRect.height() / 2 + mFramingRect.top;// canvas.drawRect(mFramingRect.left + 2, middle - 1, mFramingRect.right - 1, middle + 2, mLaserPaint);// postInvalidateDelayed(ANIMATION_DELAY, mFramingRect.left - POINT_SIZE, mFramingRect.top - POINT_SIZE, mFramingRect.right + POINT_SIZE, mFramingRect.bottom + POINT_SIZE); // 滚动的绿线 slideTop += SPEEN_DISTANCE; if (slideTop >= mFramingRect.bottom) { slideTop = mFramingRect.top; } canvas.drawRect(mFramingRect.left + MIDDLE_LINE_PADDING, slideTop - MIDDLE_LINE_WIDTH / 2, mFramingRect.right - MIDDLE_LINE_PADDING, slideTop + MIDDLE_LINE_WIDTH / 2, mLaserPaint); }
- BarcodeScannerView.java的setupLayout方法添加扫码框下的文字
if (mViewFinderView instanceof View) { addView((View) mViewFinderView); RelativeLayout relativeLayout1 = new RelativeLayout(getContext()); TextView textView = new TextView(getContext()); textView.setText(getContext().getString(R.string.scan_qrcode)); textView.setTextColor(Color.WHITE); textView.setTextSize(NUM15); textView.setGravity(Gravity.CENTER_HORIZONTAL); relativeLayout1.addView(textView); RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); layoutParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); // ViewFinderView里定义了扫码框的尺寸位置,这里根据那里算出来的 int height = (int) (496.0 / 720 * PhoneInfoUtil.getScreenPix(getContext()).widthPixels); int topOffset = (PhoneInfoUtil.getScreenPix(getContext()).heightPixels - height) / NUM3; int textTopMargin = height + topOffset + 10; layoutParams.setMargins(0, textTopMargin, 0, 0); textView.setLayoutParams(layoutParams); addView(relativeLayout1); } else { throw new IllegalArgumentException("IViewFinder object returned by " + "'createViewFinderView()' should be instance of android.view.View"); }
重新扫码&拍照权限被拒绝的处理
- BarcodeScannerView的
public void startCamera() { startCamera(CameraUtils.getCameraInstance()); } public void startCamera(Camera camera) { mCamera = camera; if (mCamera != null) { mViewFinderView.setupViewFinder(); mPreview.setCamera(mCamera, this); mPreview.initCameraPreview(); } }
没有拍照权限时,mCamera是null,所以修改两个方法,返回Camera对象
重新扫码也是调用这个方法即可
- 扫码的Activity需要实现ZBarScannerView.ResultHandler
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mScannerView = new ZBarScannerView(this); // 只识别二维码 List<BarcodeFormat> list = new ArrayList<>(); list.add(BarcodeFormat.QRCODE); mScannerView.setFormats(list); setContentView(mScannerView); } @Override public void onResume() { super.onResume(); mScannerView.setResultHandler(this); // Register ourselves as a handler for scan results. if (mScannerView.startCamera() == null) { // 拍照权限被拒绝时,返回值为null final DialogUtil.RecipeDialog dialog = DialogUtil.createCommonOneBtnDialog(this, getString(R.string.no_camera_permission), getString(R.string.ok)); dialog.show(); dialog.setCancelable(true); dialog.setCanceledOnTouchOutside(true); dialog.setOkClickListener(new View.OnClickListener() { @Override public void onClick(View v) { dialog.dismiss(); } }); } mScannerView.setAutoFocus(true); // 自动聚焦 } @Override public void onPause() { super.onPause(); mScannerView.stopCamera(); // Stop camera on pause }
0 0
- ZBar扫码
- ZBar扫码
- Zbar扫码优化
- Zbar扫码(摄像头+本地图片+6.0权限)
- QrCodeScanner扫码工具(融合Zxing和Zbar库,扫码效率奇高)
- QrCodeScanner扫码工具(融合Zxing和Zbar库,扫码效率奇高)
- iOS扫码Zbar静态库支持arm64和arms7s的静态库
- ios ZBar扫二维码奇奇怪怪的错误
- 扫条码集成Activity(Zbar 解码、ZXing 管理相机)
- 扫码
- zbar
- Zbar
- 扫码二维码
- Android 扫码模块
- iOS 原生扫码
- ZXing扫码
- 如何实现扫码
- Android 二维码扫码
- 第9周 项目1 - 猴子选大王(数组版)
- Android反射机制实现与原理
- Learning Expect
- android从Edittext中整数
- Kafka设计解析:Kafka Consumer解析
- ZBar扫码
- 项目3-稀疏矩阵的三元组表示的实现及应用
- ①学习Android前言(关于环境搭建)
- UIProgressView的使用方法详细
- 第八周-建立顺序串算法库
- 高通平台 USB OTG功能
- Dynamics CRM 检测访问CRM延迟及带宽的工具
- 【C#】构造函数和析构函数
- 什么是iMindMap