1.自定义View的概念
通过继承View、ViewGroup及其子类所创建的View就叫做自定义View。
2.自定义View的常见形式
- 1)绘制型自定义View
通过继承View,自己实现onDraw、onTouchEvent方法。 - 2)扩展型自定义View
通过继承一个View,通过复写它的一些方法来扩展它的功能,如自定义RecyclerView等。 - 2)组合型自定义View
一般继承自ViewGroup的子类,如FrameLayout等,通过Inflate布局然后findViewById或者getChild来动态的操作这些子View,形成一个统一的整体。
3.自定义View的思路
通用套路
1)构造方法定义
public XXView(@NonNull Context context) {
this(context,null);
}
public XXView(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs,-1);
}
public XXView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//这里做一些初始化的操作,如获取自定义属性、Inflate布局等。
}
2)获取测量宽高
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
mWidth = getMeasuredWidth();
mHeight = getMeasuredHeight();
}
不同形式的自定义View的自定义套路
一、绘制型定义View
说得通俗一点,其实就是作画。
1)创建画笔。
也就是在View的构造初始化方法里构造Paint对象,可以设置画笔的宽度、颜色等。
```java cornerPaint.setColor(getContext().getResources().getColor(R.color.cutview_corner));
cornerPaint.setStrokeWidth(cornerStrokeWidth);
cornerPaint.setAntiAlias(true);
cornerPaint.setStrokeCap(Paint.Cap.SQUARE);
cornerPaint.setStyle(Paint.Style.STROKE);
```
2)定义一些参数变量
3) 作画
就是在onDraw方法,通过canvas绘制一些图案,可能会用到上面定义好的参数变量。
4)动画
在onTouch方法里动态的改变上面定义的参数变量,然后调用invalidate()方法即可让onDraw方法刷新。
5)添加监听
6)补充、优化
可以定义一些自定义属性
二、扩展型自定义View
略
三、组合型自定义View
略
0 条评论