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 协议 ,转载请注明出处!