QRCodeView介绍及使用


QRCodeView是一个快捷、实用的开源QR码扫描工具,在各种移动端应用中被广泛应用。它提供了多种扫描识别QR码的方式,同时支持高度定制的UI界面,相对于其他QR码扫描工具具备更高的灵活性和扩展性。下面将从使用方法、UI定制、优化等多个方面进行详细阐述。

一、使用方法

QRCodeView集成简单易用,只需要在Gradle中添加以下代码:

dependencies {
    implementation 'com.dlazaro66.qrcodereaderview:qrcodereaderview:2.0.3'
}

然后在layout文件中引入QRCodeView控件:

<com.dlazaro66.qrcodereaderview.QRCodeReaderView
        android:id="@+id/qrdecoderview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:qrcv_layout_qr="center"
        app:qrcv_anim_time="1000" />

接着在代码中进行初始化:

public class MainActivity extends AppCompatActivity implements QRCodeReaderView.OnQRCodeReadListener {
    private QRCodeReaderView qrCodeReaderView;
    private TextView resultTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        qrCodeReaderView = findViewById(R.id.qrdecoderview);
        qrCodeReaderView.setOnQRCodeReadListener(this);
        qrCodeReaderView.setQRDecodingEnabled(true);
        qrCodeReaderView.setAutofocusInterval(2000L);
        qrCodeReaderView.setBackCamera();
        qrCodeReaderView.startCamera();
        resultTextView = findViewById(R.id.result_text_view);
    }

    @Override
    public void onQRCodeRead(String text, PointF[] points) {
        resultTextView.setText(text);
    }

    //生命周期管理
    @Override
    public void onPause() {
        super.onPause();
        qrCodeReaderView.stopCamera();
    }

    @Override
    public void onResume() {
        super.onResume();
        qrCodeReaderView.startCamera();
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        qrCodeReaderView.stopCamera();
    }
}

如上代码所示,首先通过findViewById()方法获取QRCodeView对象,然后设置OnQRCodeReadListener监听器,并开启QR码扫描功能。此外,QRCodeView还提供了多种常用的设置,如寻焦间隔、初始使用的摄像头等,具体用法详见官方文档。

二、UI界面定制

QRCodeView的UI界面一般包括一个扫描线、一个扫描框和提示文字。这些部分都可以进行定制。以扫描线的定制为例,可以通过在res目录创建anim文件夹,再在该文件夹下添加自定义的扫描线动画:

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="2000"
    android:fromDegrees="0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:repeatCount="-1"
    android:toDegrees="360" />

然后在QRCodeView的XML布局文件中设置扫描线的属性为所添加的自定义动画即可:

<com.dlazaro66.qrcodereaderview.QRCodeReaderView
        android:id="@+id/qrdecoderview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:qrcv_layout_qr="center"
        app:qrcv_anim_time="1000"
        app:qrcv_border_color="@color/transparent"
        app:qrcv_border_stroke_width="0dp"
        app:qrcv_corner_color="@color/green"
        app:qrcv_corner_length="50dp"
        app:qrcv_corner_offset="0dp"
        app:qrcv_corner_width="10dp"
        app:qrcv_mask_color="@color/mask_color"
        app:qrcv_mask_alpha="200"
        app:qrcv_border_is_showing="false"
        app:qrcv_is_border_corner_showing="true"
        app:qrcv_scan_line_anim="your_custom_scan_line_animation" />

同理,扫描框和提示文字也可以自定义样式。

三、优化

随着QRCodeView的应用范围越来越广,QR码扫描器性能的优化问题变得越来越重要。以下是几个优化QRCodeView性能的建议:

1、适时停止摄像头

由于开启摄像头需要消耗一部分手机资源,因此尽量在不使用QRCodeView的时候关闭摄像头以避免不必要的资源浪费:

@Override
public void onPause() {
    super.onPause();
    qrCodeReaderView.stopCamera();
}

@Override
public void onResume() {
    super.onResume();
    qrCodeReaderView.startCamera();
}

@Override
public void onDestroy() {
    super.onDestroy();
    qrCodeReaderView.stopCamera();
}

2、关闭光线检测

开启光线检测会导致相机预览界面实时调节亮度,降低程序运行效率,可以考虑关闭:

qrCodeReaderView.setQRDecodingEnabled(true);
qrCodeReaderView.setTorchEnabled(false);
qrCodeReaderView.setBackCamera();
qrCodeReaderView.startCamera();

3、限制相机后缓冲区

设置相机后缓冲区的最大尺寸,有助于避免由于高分辨率照片导致的OOM(Out Of Memory)错误:

final Camera.Parameters parameters = camera.getParameters();
final List previewSizes = parameters.getSupportedPreviewSizes();
final Camera.Size previewSize = getBestPreviewSize(previewSizes, screenWidth, screenHeight);
parameters.setPreviewSize(previewSize.width, previewSize.height);
final List pictureSizes = parameters.getSupportedPictureSizes();
final Camera.Size pictureSize = getBestPictureSize(pictureSizes, screenWidth, screenHeight);
parameters.setPictureSize(pictureSize.width, pictureSize.height);
parameters.setJpegQuality(100);
mCamera.setParameters(parameters);

结语

QRCodeView是一个灵活方便且功能强大的QR码扫描器,通过简单的步骤就可以在你的项目中实现QR码识别功能。此外,您也可以通过UI布局、优化等多种方式对QRCodeView进行配置,以扩展其功能和提升其性能。

评论关闭