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 条评论

发表回复

您的电子邮箱地址不会被公开。