自定义View
让我们先从一个简单的例子入手:
一个简单的环形进度条,在进度条前端位置加一个白色小圆点,然后还有一个进度加载动画。
首先我们分析一下这个自定义View包含了以下几个部分:
- 圆环背景
- 圆环进度
- 白色小圆点
- 加载动画
大概就只有这几个部分组成。
第一步:首先我们要新建一个自定义的类继承系统的View类:
public class CircleProgress extends View {
private static final String TAG = "CircleProgress";
public CircleProgress(Context context) {
super(context);
init();
}
public CircleProgress(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
init();
}
public CircleProgress(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
private void init(){
//初始化操作
}
}
需要注意的是:
1、其中还有一个构造方法
public ProgressView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
因为这个构造方法需要至少API21
才能支持,所以我们不使用。
2、在每个构造方法中我们都需要调用init()
方法来初始化我们的view。
3、除了上面代码中所展示的构造方法的写法,还有另一种方式:
public class CircleProgress extends View {
public CircleProgress(Context context) {
this(context,null);
}
public CircleProgress(Context context, @Nullable AttributeSet attrs) {
this(context