最后
如果你看到了这里,觉得文章写得不错就给个赞呗?如果你觉得那里值得改进的,请给我留言。一定会认真查询,修正不足。谢谢。
最后针对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行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!