为何要自定义控件:
1、特定的显示风格。2、处理特有的用户交互。3、优化我们的布局。4、封装等。
如何自定义控件
1、自定义属性的声明与获取(分析自定义属性,在res/vaules/attras.xml中定义声明,在View的构造方法中进行获取)。
2、测量onMeasure(Exactly、At_Most、Unispecified)。
3、布局Layout(ViewGroup)(决定View的位置,尽可能的将onMeasure中的操作移动到此方法中,requestLayout())。4、绘画onDraw(绘制内容区域invalidate(),postInvalidate();Canvas.drawXXX4、translate\rotate \scale\skew、save()、restore()
)。
5、onTouch
6、onInterceptTouchEvent
先定义属性在attrs的XML文件中
?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 定义- -->
<attr name= "progress_unreach_color" format="color" ></attr>
<attr name= "progress_unreach_height" format="dimension" ></attr>
<attr name= "progress_reach_color" format="color" ></attr>
<attr name= "progress_reach_height" format="dimension" ></attr>
<!-- 使用- -->
<declare-styleable name="HorizontialProgressBar">
<attr name= "progress_unreach_color" ></attr>
<attr name= "progress_unreach_height" ></attr>
<attr name= "progress_reach_color" ></attr>
<attr name= "progress_reach_height"></<