Android中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绘制机制:

    view树的绘制流程、measure、layout、draw

   view树的绘制流程:

扫描二维码关注公众号,回复: 2473376 查看本文章

    measure<是否重新计算视图大小> --->layout<是否重新安置视图位置>----->draw<是否需要重绘>   是一个递归过程

---measure测量:树的递归过程,自上而下有序进行遍历

参数

1、ViewGroup.LayoutParams:设置宽高

2、MeasureSpec:测量规格,包含两种,一种是测量它的模式;第二种是在这种模式下测量的大小。

重要方法

1、measure:最终还是调用了onMeasure方法

2、onMeasure:测量逻辑的方法,两个参数,宽高的测量规格。抽象方法,需要自定义。

3、setMeasuredDimension():将测量好的规格,完成整个测量过程

layout:树的递归过程,自上而下有序进行遍历。根据测量的尺寸来摆放子视图的位置。

1、layout:最终调用onLayout方法

2、onLayout:抽象方法,需要自定义。分垂直方向和水平方向的布局。

---onDraw:

---两个容易混淆的方法<回调>:

1、invalidate():请求系统,如果视图没有发生变化就不会绘制。

2、requestLayout():当布局发生变化的时候<方向、尺寸>会调用,它就会去出发measure和layout方法,但是它不会调用draw方法。

猜你喜欢

转载自blog.csdn.net/ActiveLi/article/details/81284659