- 自定义view的属性
- 在view的构造方法中获得我们自定义的属性
- 重写onMeasure
- 重写onDraw
-
自定义View的属性 res/values/新建.xml文件
`
<?xml version="1.0" encoding="utf-8"?>
<resources><attr name="titleText" format="string" />
<attr name="titleTextColor" format="color" />
<attr name="titleTextSize" format="dimension" /><declare-styleable name="MyTitleView">
<attr name="titleText" />
<attr name="titleTextColor" />
<attr name="titleTextSize" />
<attr name="borderWidth" format="dimension">
</declare-styleable>
</resources> `
- string 字符串
- color 颜色值,如#ffffff
- dimension 尺寸,xml中设置为dp/dip, 字体为sp
- integer 数值 1
- enum 枚举类型
- reference 引用,如@drawable/ic_launcher
- float 浮点类型 如1.0
- boolean 布尔类型 true或false
- fraction 百分数 如100%
- flag 位或运算
- 在布局中加入自定义的view
- 在View构造方法中,获得我们自定义的样式(重写三个构造方法)
默认调用两个参数的构造方法,在三个参数的构造中获得自定义的属性,让所有的构造调用三个参数的那个。
`
public CustomTitleView(Context context, AttributeSet attrs, int defStyle)
{
super(context, attrs, defStyle);
/**
* 获得我们所定义的自定义样式属性
*/
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.MyTitleView, defStyle, 0);
// 获取边界的宽度 mBorderWidth = a.getDimensionPixelSize(R.styleable.CircleImageView_border_width, DEFAULT_BORDER_WIDTH);
// 获取边界的颜色 mBorderColor = a.getColor(R.styleable.CircleImageView_border_color, DEFAULT_BORDER_COLOR);
}
`
4.onMeasure()测量
自定义控件设置了wrap_content时,我们需要自己进行测量,即重写onMesure方法”
onMeasure()用于测量View的大小,View大小不仅由自身决定,也受父控件的影响,重写MeasureSpec的specMode,一共三种类型:
EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
layout="30dp"
AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT
UNSPECIFIED:表示子布局想要多大就多大,很少使用
5.重写onDraw()绘制我们的视图
网友评论