总结
最后为了帮助大家深刻理解Android相关知识点的原理以及面试相关知识,这里放上相关的我搜集整理的Android开发中高级必知必会核心笔记,共计2968页PDF、58w字,囊括Android开发648个知识点,我把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包知识脉络 + 诸多细节。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
2021年虽然路途坎坷,都在说Android要没落,但是,不要慌,做自己的计划,学自己的习,竞争无处不在,每个行业都是如此。相信自己,没有做不到的,只有想不到的。
虽然面试失败了,但我也不会放弃入职字节跳动的决心的!建议大家面试之前都要有充分的准备,顺顺利利的拿到自己心仪的offer。
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
查看ViewGroup的dispatchTouchEvent()可以发现:
定义了一个boolean值变量intercept来表示是否要拦截事件。其中采用到了onInterceptTouchEvent(ev)对intercepted进行赋值,大多数情况下,是返回false,但我们完全可以重写onInterceptTouchEvent来改变它的返回值。继续往下看:
可以发现,里面做了一个for循环,通过倒序遍历ViewGroup下面的所有子View,然后一个一个判断点击位置是否在该子View的布局区域。
ViewGroup也是View,所以接下来看View的dispatchTouchEvent():
第二个条件是判断当前点击的空间是否为enable,但由于基本View都是enable的,所以这个条件基本返回true;
第三个条件表示我们调用setOnTouchListener时必须覆盖onTouch()的返回值。
可见onTouch()方法的优先级高于onTouchEvent()。
- onTouchEvent()
可以看到只要View的CLICKABLE和LONG_CLICKABLE有一个为true,那么onTouchEvent()就会返回true消耗这个事件。我们通常用setOnClickListener和setOnLongClickListener来设置被点击和长按。
接着看下performClick()方法:
可以看到,如果MOnClickListener不为空,那么它的onClick()方法就会调用。
- onInterceptTouchEvent()
view绘制流程和原理:
窗口和view和activity的区别:https://www.jianshu.com/p/28d396a0f05f
GestureDetector:在onTouchEvent(MotionEvent event) 中回调scaleGestureDetector.onTouchEvent(event),判断滑动还是缩放区分手指就好
SurfaceView:
demo3:使用的ViewPager,并设置PagerAdapter。
demo5:
ScaleGestureDetector:缩放
mGesture = new ScaleGestureDetector(mContext, new ScaleGestureDetector.OnScaleGestureListener() {
//随着手势操作,回调的方法,
@Override
public boolean onScale(ScaleGestureDetector detector) {
float previousSpan = detector.getPreviousSpan();//缩放发生前的两点距离
float currentSpan = detector.getCurrentSpan();//缩放发生时的两点距离
if (previousSpan < currentSpan)//放大
{
mZoomScale = mZoomScale + (currentSpan - previousSpan) / previousSpan;
} else {
mZoomScale = mZoomScale - (previousSpan - currentSpan) / previousSpan;
}
//确保放大最多为2倍,最少不能小于原图
if (mZoomScale > 2) {
mZoomScale = 2;
} else if (mZoomScale < 1) {
mZoomScale = 1;
}
setScaleX(mZoomScale);
setScaleY(mZoomScale);
//这里调用的是本自定义View的方法,是对本自定义view进行的缩放
/*在这里调用getChildView(index)的进行缩放,虽然控件显示大小改变了,
但是在ViewDragHelper的回调方法中获得的View child的getWidth()和getHeigit()是原来的大小,不会发生改变*/
return true;
}
@Override
public boolean onScaleBegin(ScaleGestureDetector detector) {
return true;
}
@Override
public void onScaleEnd(ScaleGestureDetector detector) {
}
});
ViewDragHelper控制子view的移动:
mViewDragHelper = ViewDragHelper.create(this, 1.0f, new ViewDragHelper.Callback() {
@Override
public boolean tryCaptureView(View child, int pointerId) {
最后
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
上面分享的腾讯、头条、阿里、美团、字节跳动等公司2019-2021年的高频面试题,博主还把这些技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节,由于篇幅有限,上面只是以图片的形式给大家展示一部分。
【Android思维脑图(技能树)】
知识不体系?这里还有整理出来的Android进阶学习的思维脑图,给大家参考一个方向。
【Android高级架构视频学习资源】
**Android部分精讲视频领取学习后更加是如虎添翼!**进军BATJ大厂等(备战)!现在都说互联网寒冬,其实无非就是你上错了车,且穿的少(技能),要是你上对车,自身技术能力够强,公司换掉的代价大,怎么可能会被裁掉,都是淘汰末端的业务Curd而已!现如今市场上初级程序员泛滥,这套教程针对Android开发工程师1-6年的人员、正处于瓶颈期,想要年后突破自己涨薪的,进阶Android中高级、架构师对你更是如鱼得水,赶快领取吧!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!