android 二维码扫描(zxing使用小结),震撼来袭

if (resultBitmap != null) {

// Draw the opaque result bitmap over the scanning rectangle

paint.setAlpha(OPAQUE);

canvas.drawBitmap(resultBitmap, frame.left, frame.top, paint);

} else {

// 画扫描框边上的角,总共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);

//绘制中间的线,每次刷新界面,中间的线往下移动SPEEN_DISTANCE

slideTop += SPEEN_DISTANCE;

if(slideTop >= frame.bottom){

slideTop = frame.top;

}

Rect lineRect = new Rect();

lineRect.left = frame.left;

lineRect.right = frame.right;

lineRect.top = slideTop;

lineRect.bottom = slideTop + 18;

canvas.drawBitmap(((BitmapDrawable)(getResources().getDrawable(R.drawable.qrcode_scan_line))).getBitmap(), null, lineRect, paint);

//画扫描框下面的字

// paint.setColor(Color.WHITE);

// paint.setTextSize(TEXT_SIZE * density);

// paint.setAlpha(0x40);

// paint.setTypeface(Typeface.create(“System”, Typeface.BOLD));

// String text = “将二维码放入框内, 即可自动扫描”;

// float textWidth = paint.measureText(text);

//

// canvas.drawText(text, (width - textWidth)/2, (float) (frame.bottom + (float)TEXT_PADDING_TOP *density), paint);

Collection currentPossible = possibleResultPoints;

Collection currentLast = lastPossibleResultPoints;

if (currentPossible.isEmpty()) {

lastPossibleResultPoints = null;

} else {

possibleResultPoints = new HashSet(5);

lastPossibleResultPoints = currentPossible;

paint.setAlpha(OPAQUE);

paint.setColor(resultPointColor);

for (ResultPoint point : currentPossible) {

canvas.drawCircle(frame.left + point.getX(), frame.top

  • point.getY(), 6.0f, paint);

}

}

if (currentLast != null) {

paint.setAlpha(OPAQUE / 2);

paint.setColor(resultPointColor);

for (ResultPoint point : currentLast) {

canvas.drawCircle(frame.left + point.getX(), frame.top

  • point.getY(), 3.0f, paint);

}

}

//只刷新扫描框的内容,其他地方不刷新

postInvalidateDelayed(ANIMATION_DELAY, frame.left, frame.top,

frame.right, frame.bottom);

}

}

2、调整位置

======

如果不设置全屏,扫描框的位置和取图的位置高度目测会有50px误差,

不全屏公式:((Y - 标题栏 - 状态栏)/2 - 扫描框高度)/2 = y轴坐标

只要不全屏:就会有误差,导致框中的二维码靠上或者远离二维码才会扫描成功

如果设置为全屏,就不会有误差,请了解内情的大神告知笔者,想知道什么原因造成

CameraManager.java 中 getFramingRect()方法

public Rect getFramingRect() {

Point screenResolution = configManager.getScreenResolution();

if (framingRect == null) {

if (camera == null) {

return null;

}

/* 确定在固定比例分辨率下二维码扫描框的宽高*/

int width = screenResolution.x * 3 / 4;

if (width < MIN_FRAME_WIDTH) {

width = MIN_FRAME_WIDTH;

} else if (width > MAX_FRAME_WIDTH) {

width = MAX_FRAME_WIDTH;

}

int height = screenResolution.y * 3 / 4;

if (height < MIN_FRAME_HEIGHT) {

height = MIN_FRAME_HEIGHT;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip204888 (备注Android)
img

文末

我总结了一些Android核心知识点,以及一些最新的大厂面试题、知识脑图和视频资料解析。

以后的路也希望我们能一起走下去。(谢谢大家一直以来的支持)

部分资料一览:

  • 330页PDF Android学习核心笔记(内含8大板块)

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

  • Android BAT大厂面试题(有解析)

[外链图片转存中…(img-fHtVX55u-1711728438590)]

[外链图片转存中…(img-TKoYfkZt-1711728438590)]

  • Android学习的系统对应视频

  • Android进阶的系统对应学习资料

[外链图片转存中…(img-4PSYiLqZ-1711728438590)]

  • Android BAT大厂面试题(有解析)

[外链图片转存中…(img-PVonuaa2-1711728438591)]

本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用zxingAndroid中生成和扫描二维码,您需要按照以下步骤操作: 1. 添加依赖项 将以下依赖项添加到您的项目中的build.gradle文件中: ``` implementation 'com.google.zxing:core:3.4.0' implementation 'com.journeyapps:zxing-android-embedded:3.6.0' ``` 2. 生成二维码 使用以下代码在应用程序中生成二维码: ``` String data = "Hello, World!"; int width = 500; int height = 500; BitMatrix bitMatrix = new MultiFormatWriter().encode(data, BarcodeFormat.QR_CODE, width, height); BarcodeEncoder barcodeEncoder = new BarcodeEncoder(); Bitmap bitmap = barcodeEncoder.createBitmap(bitMatrix); ``` 3. 扫描二维码 要在Android应用程序中扫描二维码,您需要使用zxing提供的IntentIntegrator类。使用以下代码启动扫描器: ``` IntentIntegrator integrator = new IntentIntegrator(this); integrator.setDesiredBarcodeFormats(IntentIntegrator.QR_CODE_TYPES); integrator.setPrompt("Scan a QR code"); integrator.setCameraId(0); integrator.setBeepEnabled(false); integrator.setBarcodeImageEnabled(true); integrator.initiateScan(); ``` 然后在onActivityResult()方法中处理扫描结果: ``` @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); if (result != null) { if (result.getContents() == null) { Log.d(TAG, "Cancelled scan"); } else { Log.d(TAG, "Scanned: " + result.getContents()); } } else { super.onActivityResult(requestCode, resultCode, data); } } ``` 这就是使用zxingAndroid中生成和扫描二维码的步骤。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值