1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > android studio 集成zxing二维码 条形码扫描

android studio 集成zxing二维码 条形码扫描

时间:2019-07-30 14:28:17

相关推荐

android studio 集成zxing二维码 条形码扫描

android studio 集成zxing二维码,条形码扫描

android studio 集成zxing 扫描器 扫描框、扫描线定制样式

直接上代码。代码说明:

一、添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.CAMERA" />

二、配置app build.gradle

compile 'com.google.zxing:core:3.2.1'compile 'com.journeyapps:zxing-android-embedded:3.5.0'

三、Activity使用

(1)Activity代码

public class SecondActivity extends AppCompatActivity {CompoundBarcodeView mBarcodeView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_second);mBarcodeView = (CompoundBarcodeView) findViewById(R.id.dbv_custom);if (ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA)!= PackageManager.PERMISSION_GRANTED) {ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},1);} else {// Choose only one!!!这一个是扫描结果只会出来一次mBarcodeView.decodeSingle(callback);// Or这一是扫描结果一直会打印出来//mBarcodeView.decodeContinuous(callback);}}private BarcodeCallback callback = new BarcodeCallback() {@Overridepublic void barcodeResult(BarcodeResult result) {// Do something with the scanned QR code.// result.getText() returns decoded QR code.//mBarcodeView.System.out.println("______________________________"+result.getText());/* if(!TextUtils.isEmpty(result.getText())){mBarcodeView.decodeContinuous(null);}*/}@Overridepublic void possibleResultPoints(List<ResultPoint> resultPoints) {}};@Overrideprotected void onPause() {super.onPause();mBarcodeView.pause();}@Overrideprotected void onResume() {super.onResume();mBarcodeView.resume();}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {if (requestCode == 1) {if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {// Choose only one!!!mBarcodeView.decodeSingle(callback);// Or//mBarcodeView.decodeContinuous(callback);return;}}super.onRequestPermissionsResult(requestCode, permissions, grantResults);}}

(2)activity布局文件代码

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:app="/apk/res-auto"android:gravity="center"><com.poundBarcodeView android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/dbv_custom"app:zxing_scanner_layout="@layout/code_scanning_scanner"></com.poundBarcodeView></LinearLayout>

其中重点是 app:zxing_scanner_layout=”@layout/code_scanning_scanner”

code_scanning_scanner控制扫描页面的样式,下面重点解析。

(3)code_scanning_scanner代码

<?xml version="1.0" encoding="utf-8"?><merge xmlns:android="/apk/res/android"xmlns:tools="/tools"xmlns:app="/apk/res-auto"><com.journeyapps.barcodescanner.BarcodeView android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/zxing_barcode_surface"app:zxing_framing_rect_width="250dp"app:zxing_framing_rect_height="250dp"app:qrcv_animTime="1000"app:qrcv_borderColor="#00000000"app:qrcv_borderSize="1dp"app:qrcv_cornerColor="#ffffff"app:qrcv_cornerLength="20dp"app:qrcv_cornerSize="3dp"app:qrcv_maskColor="#33FFFFFF"app:qrcv_rectWidth="220dp"app:qrcv_scanLineColor="#ffffff"app:qrcv_scanLineSize="1dp"app:qrcv_topOffset="100dp"/><com.ljm.zxing.ScanView android:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/zxing_viewfinder_view"app:zxing_possible_result_points="@color/zxing_custom_possible_result_points"app:zxing_result_view="@color/zxing_custom_result_view"app:zxing_viewfinder_laser="@color/zxing_custom_viewfinder_laser"app:zxing_viewfinder_mask="@color/zxing_custom_viewfinder_mask"/><TextView android:id="@+id/zxing_status_view"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="bottom|center_horizontal"android:background="@color/zxing_transparent"android:text="@string/zxing_msg_default_status"android:textColor="@color/zxing_status_text"/></merge>

com.ljm.zxing.ScanView是自定义控件,控制扫描框,扫描线等样式

(4)ScanView代码

package com.ljm.zxing;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Rect;import android.util.AttributeSet;import com.journeyapps.barcodescanner.CameraPreview;import com.journeyapps.barcodescanner.ViewfinderView;/*** Created by BettyLi on /3/22.* 重写ViewfinderView设置扫描框的样式,四个角和扫描线样式*/public class ScanView extends ViewfinderView {protected static final int CURRENT_POINT_OPACITY = 0xA0;protected Bitmap resultBitmap;protected final Paint paint;protected CameraPreview cameraPreview;protected Rect framingRect;protected Rect previewFramingRect;private int i=0;private int ScreenRate;/*** 四个绿色边角对应的宽度*/private static final int CORNER_WIDTH = 10;/*** 手机的屏幕密度*/private static float density;public ScanView(Context context, AttributeSet attrs) {super(context, attrs);paint = new Paint(Paint.ANTI_ALIAS_FLAG);//四个绿色边角density = context.getResources().getDisplayMetrics().density;//将像素转换成dpScreenRate = (int)(20 * density);}public void setCameraPreview(CameraPreview view) {this.cameraPreview = view;view.addStateListener(new CameraPreview.StateListener() {@Overridepublic void previewSized() {refreshSizes();invalidate();}@Overridepublic void previewStarted() {}@Overridepublic void previewStopped() {}@Overridepublic void cameraError(Exception error) {}@Overridepublic void cameraClosed() {}});}protected void refreshSizes() {if(cameraPreview == null) {return;}Rect framingRect = cameraPreview.getFramingRect();Rect previewFramingRect = cameraPreview.getPreviewFramingRect();if(framingRect != null && previewFramingRect != null) {this.framingRect = framingRect;this.previewFramingRect = previewFramingRect;}}@SuppressLint("DrawAllocation")@Overridepublic void onDraw(Canvas canvas) {refreshSizes();if (framingRect == null || previewFramingRect == null) {return;}Rect frame = framingRect;int width = canvas.getWidth();int height = canvas.getHeight();paint.setColor(resultBitmap != null ? resultColor : maskColor);canvas.drawRect(0, 0, width, frame.top, paint);canvas.drawRect(0, frame.top, frame.left, frame.bottom + 1, paint);canvas.drawRect(frame.right + 1, frame.top, width, frame.bottom + 1, paint);canvas.drawRect(0, frame.bottom + 1, width, height, paint);if (resultBitmap != null) {paint.setAlpha(CURRENT_POINT_OPACITY);canvas.drawBitmap(resultBitmap, null, frame, paint);}else{drawFrameCorner(canvas, frame);drawLaserLine(canvas, frame);//绘制扫描线}}/*** 画扫描线** @param canvas* @param frame*/private void drawLaserLine(Canvas canvas, Rect frame) {if ((i += 5) < frame.bottom - frame.top) {} else {i = 0;}paint.setStyle(Paint.Style.FILL);paint.setColor(Color.GREEN);// 设置扫描线颜色canvas.drawRect(frame.left - 1, frame.top + i - 1, frame.right + 1,frame.top + 1 + i, paint);// 刷新invalidate();}/*** 绘制扫描框4角** @param canvas* @param frame*/private void drawFrameCorner(Canvas canvas, Rect frame) {//画扫描框边上的角,总共8个部分paint.setColor(Color.GREEN);canvas.drawRect(frame.left, frame.top, frame.left + ScreenRate,frame.top + CORNER_WIDTH, paint);canvas.drawRect(frame.left, frame.top, frame.left + CORNER_WIDTH, frame.top+ ScreenRate, paint);canvas.drawRect(frame.right - ScreenRate, frame.top, frame.right,frame.top + CORNER_WIDTH, paint);canvas.drawRect(frame.right - CORNER_WIDTH, frame.top, frame.right, frame.top+ ScreenRate, paint);canvas.drawRect(frame.left, frame.bottom - CORNER_WIDTH, frame.left+ ScreenRate, frame.bottom, paint);canvas.drawRect(frame.left, frame.bottom - ScreenRate,frame.left + CORNER_WIDTH, frame.bottom, paint);canvas.drawRect(frame.right - ScreenRate, frame.bottom - CORNER_WIDTH,frame.right, frame.bottom, paint);canvas.drawRect(frame.right - CORNER_WIDTH, frame.bottom - ScreenRate,frame.right, frame.bottom, paint);}public void drawViewfinder() {Bitmap resultBitmap = this.resultBitmap;this.resultBitmap = null;if (resultBitmap != null) {resultBitmap.recycle();}invalidate();}public void drawResultBitmap(Bitmap result) {resultBitmap = result;invalidate();}}

源码地址/download/qq_24349695/10302772

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。