【原创】Android 二维码 zxing-android-embedded的使用以及自定义样式

转载注明出处,否则小jj弹肿,什么?!没有?? 那...嘿嘿嘿~

https://blog.csdn.net/dazhang357/article/details/81559888

最近项目中要使用扫描二维码,于是乎就用到了 zxing-android-embedded 这个由zing库演变过来的android版的三方库,现在把使用心得以及过程进行分享~

话不多说,搞起!

第一步:导包和权限

权限:

   <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <!-- 闪光灯不用就删 -->
    <uses-permission android:name="android.permission.FLASHLIGHT" />

这里多说一句,我用的是api导包方式(一个小知识点):

api("com.journeyapps:zxing-android-embedded:3.6.0") {
    exclude group: 'com.android.support'
}

肯定有朋友问了,为什么不用最常见的 implementation方式呢,好说,上面这种导入方式好处是,不会导致三方库的依赖包和项目本地的依赖包产生冲突,例如:com.android.support:appcompat-v7:28.0.0-beta01包,所以我建议各位以后导库都用上面的方式,一劳永逸,没懂?无所谓跟着做肯定没毛病,当然前提你的AS版本 >= 3.0的,要不然当我没说。

第二步:创建自定义ViewfinderView 类:

新建一个类 MyViewFinderView 继承 ViewfinderView 类,并重写它的两个方法:onDraw(Canvas canvas) 和 refreshSizes()方法。

onDraw(Canvas canvas) 里的内容去源码中copy即可,下面是我自己改的自定义样式代码:

    @Override
    public void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        refreshSizes();
        if (framingRect == null || previewFramingRect == null) {
            return;
        }

        final Rect frame = framingRect;
        final Rect previewFrame = previewFramingRect;

        final int width = canvas.getWidth();
        final int height = canvas.getHeight();

        // 注意此处如果不进行赋值,就会走下面的else方法,绘制图形。我比较懒,就直接引入了一个扫描边框图片。
        resultBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.sc_bg);
        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);

        // 此处是我自己写绘制的扫描线
        drawScLine(liney, canvas);

        if (resultBitmap != null) {
            // Draw the opaque result bitmap over the scanning rectangle
            paint.setAlpha(CURRENT_POINT_OPACITY);
            canvas.drawBitmap(resultBitmap, null, frame, paint);
        } else {

            // Dra
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值