来来来,来复习一下,android 传说中的自定义控件。
首先我们来看看目前非自定义控件哪些?
大概就是图片里面的控件了,android 5.0之后 材料设计风格已经是Android UI里程碑上的一个进步。但是大家觉得够用吗?显然就是不够用的,在小型公司里面各种破需求,什么IOS控件UI多美啊?按着苹果走就行了,等等破需求显然就满足不了。所以,就产生了自定义控件,你想怎么干就怎么干,想哪里上滑就上滑一切都在自定义。
源码看继承关系
那么自定义控件是怎么弄的?我们点开android自带的控件看看源码,我们来看看Button。
看继承关系,那就是说,顶层父类就是view,Button具备TextView的功能。那么我们来看TextView这个控件,TextView具备显示文本的功能,但是我需要不单只是显示文本,我还需要可以放大缩小,闪闪发光,点事促发事件的功能等等,那我就需要自己来造一个MyView控件,当然他的父类必定是View,继承View。同事,也可以直接继承Button,具备了点击促发事件功能和显示文本的功能,但是,一般来说都是继承View会比较灵活。
上代码如下:
public class MyView extends View {
public MyView(Context context) {
super(context);
}
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
}
好了,这就是继承View之后要实现的构造方法,以下进行一下优化。
直接上图了:
Why这样写?其实很简单,每个构造方法可以进行打LOG看看其执行的方向。我这里就直接说了,构造方法都会走到从第一个一直走到第三个,直接在第三个创建方法来初始化一些日常的类,避免每个构造方法都写一个初始化方法。(其中不懂的同学可以复习一下java基础this和super作用关系)
自定义控件View绘制流程
1、准备工作(1、继承View或者ViewGroup 2、findById)
2、测量(onMeasure()–onSizeChanged())
3、摆放(onLayout())
4、画绘制(onDraw())
以上就是自定义控件的简述,下篇会结合些例子进行讲述。