View的职责,根据测量模式和ViewGroup给出的建议的宽和高,计算出自己的宽和高;同时还有个更重要的职责是:在ViewGroup为其指定的区域内绘制自己的形态。
自定义view广义的来说自己实现的一种新的布局就叫自定义的view,一般的自定义view就是自己创建一个类继承view,ViewGroup或者已有的控件.自定义view的步骤如下:
- 自定义一个CustomView(extends View )类
- 编写values/attrs.xml,在其中编写styleable和item等标签元素
- 在布局文件中CustomView使用自定义的属性(注意namespace)
- 在CustomView的构造方法中通过TypedArray获取
- 重写onmesarue方法
- 重写onlayout方法,一般不用,继承viewgroup才要
- 重写onDraw方法
- 可以添加点击,滑动(ontouchEvent)事件,然后在利用接口写回调方法.
View的绘制过程:
1.mesarue()测量过程
系统调用mesarue()方法来测量,里面调用的是Onmesarue(),mesarue()方法是final的不可以重写,我们只能重写o’nMesarue()方法.
主要作用:为整个View树计算实际的大小,即设置实际的高(对应属性:mMeasuredHeight)和宽(对应属性: mMeasureWidth),每个View的控件的实际宽高都是由父视图和本身视图决定的
如果是wrap_..就要重写这个方法.或者有要按比例动态设置大小的也可以重写,比如viewpager的高
2.layout()布局过程
主要作用 :为将整个根据子视图的大小以及布局参数将View树放到合适的位置上。这个位置不是指界面上的位置而是指view数层上的位置.
3,draw()绘制过程,可以控制要绘制什么,绘制在界面上的什么位置