android view的绘制过程

1. Invalidate() 指定重新绘制部分区域


2. requestLayout() 是当view大小改变的时候,调用


3. Canvas 画什么 比如画圆,方形等


4. Paint 怎么画 颜色,线条粗细等,创建paint很耗资源,所以最好在初始化的时候创建好,不要在onDraw方法里面创建


5. 继承onSizeChanged(),决定view改变时候的绘制方式;这里其实是对绘制新的图形做一些处理,onSizeChanged()传给你四个值,可供你利用,然后你根据这四个值来决定他们改变后,你的view里面各个元素怎么绘制。注意,padding 是算在view内的,而margin则不算在view内。所以决定元素绘制位置的时候,可以不考虑margin但是必须考虑padding


6. onMeasure()方法,传入两个int型参数,widthMeasureSpec heightMeasureSpect,这两个int值可以通过MeasureSpect类得到另外两个值(得到方法是这个int&一个掩码或者该掩码的补码),一个是measure的类型mode, 另外就是这个measure值:

Measure Mode包括三种,Exactly 大致等于设置了layout_width = 60dp 这样, AT_MOST大致等于match_parent这样;UNSPECIFIED大致等于wrap_content这样;

measuredSpec这个值就是parent view给子view的限制了,最大是多大。


onMeasure方法获得这些信息后,就可以来决定自己的view到底要绘制多大,

通常onMeasure方法里面会调用一下resolveSizeAndState()或者resolveSize ()这两个方法,大致是传入你要的sizeparent给的size,并且做出一个协调结果,省了你自己去判断parentMeasureSpec Mode了。另外还加上一个掩码,目前我还不太清楚这个掩码是干什么用的


总之,调用完onMeasure()方法后,一定要调用setMeasureDimension()来决定最终的宽和高。


7. 在量完这个view的宽,高(onMeasure方法)view内部各个部件该绘制到哪个位置之后,就可以实现onDraw()方法来实际绘制了。



参考:绘制view过程见官方:

http://developer.android.com/training/custom-views/index.html

有关onMeasure的说明:

http://stackoverflow.com/questions/12266899/onmeasure-custom-view-explanation

有关resolveSizeAndState 见源码:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4.2_r1/android/view/View.java#View.0MEASURED_STATE_MASK


android view的绘制过程,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。