Android ZXing 超简单的实现二维码扫描、可以自定义界面

我只会实现不会原理

我不太会写博客、不过应该是可以看懂的

gradle快速导入:

在build.gradle(Project)文件中添加

allprojects {
    repositories {
        google()
        maven {
            url "https://jitpack.io"
        }
        jcenter()
    }
}

然后再在build.gradle(app)中添加依赖

dependencies {
    implementation 'com.github.iqosjay:QRScanner:2.0'
}

如果你只是想使用这个功能而不使用自己的界面

那么只需要这样启动

public void openScan() {
    Intent intent = new Intent(this, QRScannerActivity.class);
    startActivityForResult(intent, QRScannerActivity.SCAN_RESULT_CODE);
}

当你想要获取扫码的结果

只需要重写onActivityResult()方法

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (resultCode) {
        case QRScannerActivity.SCAN_RESULT_CODE:
            if (null == data) break;
            String result = data.getStringExtra(QRScannerActivity.SCAN_RESULT);
            Toast.makeText(this, result, Toast.LENGTH_SHORT).show();
            break;
    }
}

这样你就能拿到扫码的结果(我这里只是Toast了一下)

如果你觉得这个库的作者弄的界面太恶心了

你也可以使用你自己的界面

使用方法如下

首先你新建一个Activity继承自QRScannerActivity

然后把它的布局文件修改为这样



    
    
    
    
    
    


注意!! SurfaceView和ViewFinderView的id是不能变的一定要是上面写的那样

标题栏也是必须include的

否则会提示找不到控件导致闪退

上面的属性意思:

app:scan_line_move_speed:就是扫描的线移动的速度

app:scan_line_res:扫描的线的图片资源

app:scan_rect_corner_color:扫码框的四个角的颜色

app:scan_rect_corner_length:扫码框的四个角的长度

app:scan_rect_corner_width:扫码框的四个角的宽度

app:scan_text_above_rect:提示文本是否处于扫描框之上

app:scan_tip_text:扫描的提示文本

app:scan_tip_text_size:扫描提示文本的文字大小

扫码框的大小不能修改!

长和宽都固定为屏幕宽度的2/3

这个布局文件你已经写好了

现在重写Activity中的方法

public class MyQrScannerActivity extends QRScannerActivity {

    @Override
    protected int getLayoutResources() {
        return R.layout.activity_my_qr_scanner;
    }
}

把getLayoutResources()方法重写修改返回值为你刚才写的布局

再启动一看

界面就已经被修改过了~~

那么扫描的结果怎么获取呢?

重写handleDecode()方法

 @Override
public void handleDecode(Result result) {
    Toast.makeText(this, result.getText(), Toast.LENGTH_SHORT).show();
}

这样就能拿到扫码结果之后写自己的逻辑

其它:

1、如果想要扫描成功之后继续扫描

只需要在需要继续扫描的调用

  super.restartQRScanner();

即可继续扫描

2、如果需要在扫描成功之后振动手机和播放声音

只需要在解码成功的方法那里调用

super.playBeepSoundAndVibrate();

像这样

 @Override
public void handleDecode(Result result) {
    Toast.makeText(this, result.getText(), Toast.LENGTH_SHORT).show();
    super.playBeepSoundAndVibrate();
}

这样就有了振动和声音


需要源码的同学请移步github:    

    https://github.com/iqosjay/QRScanner

你可能感兴趣的:(Android)