自定义View
版权声明:本文为博主原创文章,未经博主允许不得转载。
View:顶层视图父类
对于任意控件,都需要继承自View类,所以对于自定义View,需要继承于View类
-----------------------------------------------------------------------
1.构造函数
四个参数的意义:
Context context 上下文引用
AttributeSet attrs 自定义属性集
int defStyleAttr 默认样式
int defStyleRes 默认资源引用
public SubView(Context context) {
super(context);
}
调用自身构造函数
public SubView(Context context) {
this(context, null);
}
//AttributeSet attrs 自定义属性集
//自定义属性从XML文件中进行获取
public SubView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, 0);
}
public SubView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
2.无需创建自定义View对象,直接在xml文件中使用
全包名.全类名 com.jiyun.demo01.SubView
------------------------------------------------------------------------
如何绘制自定义View:
前提:具备自定义属性
1.创建自定义属性
res/values/attrs.xml
2.声明自定义属性
<resources>
<declare-styleable name="SubView">
<attr name="myText" format="string"></attr>
<attr name="myColor" format="color"></attr>
<attr name="myTextSize" format="dimension"></attr>
</declare-styleable>
</resources>
通过attr标签,声明属性值,并且规定接受类型
3.自定义属性取值
①从res/values/attrs.xml中去取属性
②需要对属性声明名称
xmlns:day15="http://schemas.android.com/apk/res-auto"
--------------------------------------------------------------------------
对自定义控件进行设置
1.onLayout Layout摆放一个View的位置
①onLayout是ViewGroup用来决定子View摆放位置的,各种布局的差异都在该方法中得到了体现。
②onLayout比layout多一个参数,changed,该参数是在setFrame通过比对上次的位置得出是否发生了变化,通常该参数没有被使用的意义,
因为父View位置和大小不变,并不能代表子View的位置和大小没有发生改变。
2.onMeasure Measure测量一个View的大小
widthMeasureSpec
heightMeasureSpec
选择EXACTLY测绘模式,表示的精确值
3.onDraw(重点)Draw画出View的显示内容