Android自定义View是Android的一个大知识点,我对自定义控件从来都是一知半解,做个笔记,以防忘记;
自定义View一般需要以下几个步骤:
①在attrs里写自己需要的属性;
②在继承来自View或View的子类的构造方法获取属性;
③重写onMesure()方法;
④重写onDraw()方法;
个人认为onMesure方法和onDraw是难点;首先onMesure方法里面控制自定义View的显示位置,先看以下代码:
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
- {
- //获取宽度模式
- int widthMode = MeasureSpec.getMode(widthMeasureSpec);
- //获取字体大小
- int widthSize = MeasureSpec.getSize(widthMeasureSpec);
- //获取高度模式
- int heightMode = MeasureSpec.getMode(heightMeasureSpec);
- //获取字体大小
- int heightSize = MeasureSpec.getSize(heightMeasureSpec);
-
- int width;
- int height ;
- if (widthMode == MeasureSpec.EXACTLY)
- {
- width = widthSize;
- } else
- {
- //做一些操作
- }
- if (heightMode == MeasureSpec.EXACTLY)
- {
- height = heightSize;
- } else
- {
- //做一些操作
- }
- setMeasuredDimension(width, height);
- }
上面的方法指定了自定义属性显示的位置;在网上查到一些getMode的信息,没有太理解,不过这样用肯定是没错的,这个是我查出来他的三种类型
MeasureSpec的specMode,一共三种类型:
EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT
UNSPECIFIED:表示子布局想要多大就多大,很少使用
以上是onMeasure的代码;
onDraw的使用就不在这里说了,具体的问题具体分析,里面还有好多细节问题我并没有搞明白,瞎说会遭人白眼。。。