View绘制背诵版

1.概述:

View的绘制流程是从ViewRoot的performTraversals方法开始的,它经过measure,layout和draw三个过程才能最终将1个View绘制出来,其中mearsure用来测量View的宽和高,layout用来确定View在父容器中的放置位置,而draw则负责将View绘制在屏幕上。

performTraversals会依次调用performMearsure,performLayout和performDraw三个方法,它们分别完成顶级View的measure,layout,和draw三大流程。

mearsure中会调用onMearsure,onMearsure中会对所有子元素进行measure过程,这个时候measure流程就传到了子元素中,这就完成了一次measure过程,接着子元素重复父容器的measure过程,如此反复就完成了整个View树的遍历.。 performLaout和performDraw同理.

2.MeasureSpec

SpecMode: EXACTLY AT_MOST _UNSPECIFIED

3.View测量的宽和高由View的MeasureSpec决定,而它的规格 由LayoutParams和父容器对子元素的要求决定(规格)

4.getMeasureWidth和getWidth的区别

前者在测量过程结束后可以获得;后者在layout过程结束后才能获得。

5.onMeasure可能会被调多次

6.View类的onMeasure方法做了什么?

自定义View:主要实现onMeasure + onDraw

自定义ViewGroup:主要实现onMeasure+onLayout

android 自定义属性步骤

1.在res/values目录下新建一个attrs.xml; 将之前规划好的属性定义在attrs.xml中。declare-styleable标签里的 子标签中

<declare-styleable <declare-styleable name="MyTextView">
    name="textColor" format="color"/>
    name="textSize" format="dimension"/>
    name="text" format="string"/>
    name="background" format="reference|color"/>
declare-styleable>

2.在自定义View中,主要是构造方法中获取自定义的属性的值 ,以供我们实现自定义view的需要。自定义属性使用R.styleable引用,获取里面的属性需要使用“名字_属性”的方式。TypeArray在使用完成后要进行recycle().

3.实现好自定义view,然后就是使用自定义view


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!