生命周期回调
除了特殊说明外按顺序调用
- 构造方法
- onFinishInflate():从XML中inflate结束后调用,如果有子控件会等子控件添加完毕后调用。
- onAttachedToWindow():依附到一个window上的时候调用,此时有一个Surface可以用来绘制,该方法保证在onDraw()之前调用,但是与onMeasure()的调用顺序是不固定的。
- onMeasure()
- onSizeChanged():layout过程中当View的大小改变的时候调用。
- onLayout():用来调用子控件的layout()来安排位置。
- onDraw()
- onDetachedFromWindow():从window上脱离的时候调用,此时不再有一个Surface可供绘制了。
View所在Activity每次onResume()后,View的onDraw()方法都会被调用。
创建自定义View
继承于View
如果要在XML中添加我们创建的自定义View,则这个自定义View必须包含一个参数为Context对象和AttributeSet对象的构造方法。
class PieChart extends View {
public PieChart(Context context, AttributeSet attrs) {
super(context, attrs);
}
}
定义自定义属性
- 在res/values/attrs.xml文件中定义标签名为
<declare-styleable>
的资源。
<resources>
<declare-styleable name="PieChart">
<attr name="showText" format="boolean" />
<attr name="labelPosition" format="enum">
<enum name="left" value="0"/>
<enum name="right" value="1"/>
</attr>
</declare-styleable>
</resources>
- 在XML布局中使用自定义属性,命名空间与默认的http://schemas.android.com/apk/res/android不一样,应该指定为http://schemas.android.com/apk/res/[your package name]. 包名应该是全名,如果是内部类就要指明内部类名com.example.customviews.charting.PieChart$PieView
- 在代码中获取自定义属性
- 把自定义属性应用于自定义View上