Android 面试题总结之Android 进阶(一)
在前几篇文章中都是讲的基础,大家应该会觉得非常熟悉,但往往我们可能对于基础某些细节认识不够彻底或贯穿不全,我一直认为基础都是比较难的,那么本章节终于到进阶啦,主要讲的是View 的相关知识,在前面《Android 面试题总结之Android 基础 (六)》
中已经对View有了一定的了解,由于内容较多且也是面试必考题,所以将分两篇继续深入的理解View。在阅读过程中有任何问题,请及时联系。如需转载请注明 fuchenxuan de Blog
本章系《Android 之美 从0到1 – 高手之路》Android进阶(一)自定义View的过程
掌握
- 什么是View?
- View 坐标的基本概念
- View的生命周期
- 如何自定义View
什么是View?
android.app.View 就是手机的UI,View 负责绘制UI,处理事件(evnet),Android 利用 View 打造出所 Widgets,利用 Widget 可打造出互动式的使用者介面,每个View 负责一定区域的绘制。
一张图理解常用控件层级关系
View 坐标的基本概念
View的宽高是有top、left、right、bottom参数决定的 而X,Y和translationX,和translationY则负责View位置的改变。
从Android3.0开始,加入了translation的概念,即相对于父容器的偏移量以及X,Y坐标的概念,X,Y代表左上顶点的横纵坐标。当View在发生平移时,getX,getY,setX,setY
get/setTranslationX/Y来获得当前左上点的坐标。
X=left+translationX Y同理。
注意:在View发生改变的过程中,top,left等值代表原始位置,是不会改变的。改变的只有X,Y,translationX/Y。
一张图理解View的坐标概念
View的生命周期
Category | Methods | Description |
---|---|---|
Creation | Constructors | 几个View的构造函数 |
onFinishInflate() | 当系统解析完View之后调用onFinishInflate方法 | |
Layout | onMeasure(int, int) | 确定所有子View的大小 |
onLayout(boolean, int, int, int, int) | 当ViewGroup分配所有的子View的大小和位置时触发 | |
onSizeChanged(int, int, int, int) | 当view的大小发生变化时触发 | |
Drawing | onDraw(android.graphics.Canvas) | view渲染内容的细节 |
Event processing | onKeyDown(int, KeyEvent) | 有按键按下后触发 |
onKeyUp(int, KeyEvent) | 有按键按下后弹起时触发 | |
onTrackballEvent(MotionEvent) | 轨迹球事件 |