2024年最全android zbar二维码扫描(中文不乱码),vivo 面试

最后

如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。

最后针对Android程序员,我这边给大家整理了一些资料,包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

import android.graphics.Paint;

import android.graphics.Rect;

import android.graphics.drawable.Drawable;

import android.util.AttributeSet;

import android.view.View;

/**

  • 查找框

  • @author niexiaoqiang

*/

public class FinderView extends View {

private static final long ANIMATION_DELAY = 100L;

private Paint finderMaskPaint;

private int measureedWidth;

private int measureedHeight;

/**

  • 手机的屏幕密度

*/

private static float density;

/**

  • 四个绿色边角对应的长度

*/

private int ScreenRate;

/**

  • 四个绿色边角对应的宽度

*/

private static final int CORNER_WIDTH = 5;

/**

  • 边框颜色

*/

private int middleRectColor;

private int maskColor;

public FinderView(Context context) {

super(context);

init(context);

}

public FinderView(Context context, AttributeSet attrs) {

super(context, attrs);

init(context);

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

// canvas.drawRect(leftRect, finderMaskPaint);

// canvas.drawRect(topRect, finderMaskPaint);

// canvas.drawRect(rightRect, finderMaskPaint);

// canvas.drawRect(bottomRect, finderMaskPaint);

// 画框(此方法是通过图片画出 看起来比较死板,在此参照zxing画边方法)

// zx_code_kuang.setBounds(middleRect);

// zx_code_kuang.draw(canvas);

// 获取屏幕的宽和高

int width = canvas.getWidth();

int height = canvas.getHeight();

// 画出扫描框外面的阴影部分,共四个部分,扫描框的上面到屏幕上面,扫描框的下面到屏幕下面

// 扫描框的左边面到屏幕左边,扫描框的右边到屏幕右边

// Draw the exterior (i.e. outside the framing rect) darkened

finderMaskPaint.setColor(maskColor);

canvas.drawRect(0, 0, width, middleRect.top, finderMaskPaint);

canvas.drawRect(0, middleRect.top, middleRect.left, middleRect.bottom + 1, finderMaskPaint);

canvas.drawRect(middleRect.right + 1, middleRect.top, width, middleRect.bottom + 1,

finderMaskPaint);

canvas.drawRect(0, middleRect.bottom + 1, width, height, finderMaskPaint);

/*

  • zxing 画扫描框边上的角,总共8个部分

*/

finderMaskPaint.setColor(Color.GREEN);

canvas.drawRect(middleRect.left, middleRect.top, middleRect.left

  • ScreenRate, middleRect.top + CORNER_WIDTH, finderMaskPaint);

canvas.drawRect(middleRect.left, middleRect.top, middleRect.left

  • CORNER_WIDTH, middleRect.top + ScreenRate, finderMaskPaint);

canvas.drawRect(middleRect.right - ScreenRate, middleRect.top,

middleRect.right, middleRect.top + CORNER_WIDTH,

finderMaskPaint);

canvas.drawRect(middleRect.right - CORNER_WIDTH, middleRect.top,

middleRect.right, middleRect.top + ScreenRate, finderMaskPaint);

canvas.drawRect(middleRect.left, middleRect.bottom - CORNER_WIDTH,

middleRect.left + ScreenRate, middleRect.bottom,

finderMaskPaint);

canvas.drawRect(middleRect.left, middleRect.bottom - ScreenRate,

middleRect.left + CORNER_WIDTH, middleRect.bottom,

finderMaskPaint);

canvas.drawRect(middleRect.right - ScreenRate, middleRect.bottom

  • CORNER_WIDTH, middleRect.right, middleRect.bottom,

finderMaskPaint);

canvas.drawRect(middleRect.right - CORNER_WIDTH, middleRect.bottom

  • ScreenRate, middleRect.right, middleRect.bottom,

finderMaskPaint);

if (lineRect.bottom < middleRect.bottom) {

zx_code_line.setBounds(lineRect);

lineRect.top = lineRect.top + lineHeight / 2;

lineRect.bottom = lineRect.bottom + lineHeight / 2;

} else {

lineRect.set(middleRect);

lineRect.bottom = lineRect.top + lineHeight;

zx_code_line.setBounds(lineRect);

}

zx_code_line.draw(canvas);

postInvalidateDelayed(ANIMATION_DELAY, middleRect.left, middleRect.top,

middleRect.right, middleRect.bottom);

}

private Rect topRect = new Rect();

private Rect bottomRect = new Rect();

private Rect rightRect = new Rect();

private Rect leftRect = new Rect();

private Rect middleRect = new Rect();

private Rect lineRect = new Rect();

private Drawable zx_code_kuang;

private Drawable zx_code_line;

private int lineHeight;

private void init(Context context) {

int finder_mask = context.getResources().getColor(R.color.finder_mask);

finderMaskPaint = new Paint();

finderMaskPaint.setColor(finder_mask);

zx_code_kuang = context.getResources().getDrawable(

R.drawable.zx_code_kuang);

zx_code_line = context.getResources().getDrawable(

R.drawable.zx_code_line);

lineHeight = 30;

// 获取屏幕密度

density = context.getResources().getDisplayMetrics().density;

// 计算当前屏幕密度下边框的厚度

最后

感觉现在好多人都在说什么安卓快凉了,工作越来越难找了。又是说什么程序员中年危机啥的,为啥我这年近30的老农根本没有这种感觉,反倒觉得那些贩卖焦虑的都是瞎j8扯谈。当然,职业危机意识确实是要有的,但根本没到那种草木皆兵的地步好吗?

Android凉了都是弱者的借口和说辞。虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

所以,最后这里放上我耗时两个月,将自己8年Android开发的知识笔记整理成的Android开发者必知必会系统学习资料笔记,上述知识点在笔记中都有详细的解读,里面还包含了腾讯、字节跳动、阿里、百度2019-2021面试真题解析,并且把每个技术点整理成了视频和PDF(知识脉络 + 诸多细节)。

以上全套学习笔记面试宝典,吃透一半保你可以吊打面试官,只有自己真正强大了,有核心竞争力,你才有拒绝offer的权力,所以,奋斗吧!骚年们!千里之行,始于足下。种下一颗树最好的时间是十年前,其次,就是现在。

最后,赠与大家一句诗,共勉!

不驰于空想,不骛于虚声。不忘初心,方得始终。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

年前,其次,就是现在。

最后,赠与大家一句诗,共勉!

不驰于空想,不骛于虚声。不忘初心,方得始终。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值