Android自定义View进阶:分类与流程

Android自定义View基础:坐标系
Android自定义View基础:角度弧度

1.自定义View

在没有现成的View,需要自己实现的时候,就使用自定义View,一般继承自View,SurfaceView或其他的View,不包含子View。

2.自定义View中的构造方法

一、
//一般我们只使用前两个
//一般在直接New一个View的时候调用。
    public PainView(Context context) {
        super(context);
    }
//一般在layout文件中使用的时候会调用,关于它的所有属性(包括自定义属性)都会包含在attrs中传递进来。
    public PainView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
//这以下我不会用啊!!

    public PainView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public PainView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }


二、
  //在Avtivity中
  PainViewview = new PainView(this);
三、
  //在layout文件中 - 格式为: 包名.View名
 com.xx.xx.PainView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

3.测量View大小(onMeasure)

 @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int widthsize = MeasureSpec.getSize(widthMeasureSpec);      //取出宽度的确切数值
        int widthmode = MeasureSpec.getMode(widthMeasureSpec);      //取出宽度的测量模式
 
        int heightsize = MeasureSpec.getSize(heightMeasureSpec);    //取出高度的确切数值
        int heightmode = MeasureSpec.getMode(heightMeasureSpec);    //取出高度的测量模式
    }

****实际上关于上面的东西了解即可,在实际运用之中只需要记住有三种模式,用 MeasureSpec 的 getSize是获取数值, getMode是获取模式 如果对View的宽高进行修改了**

注意

不要调用super.onMeasure(widthMeasureSpec,heightMeasureSpec);要调用setMeasuredDimension(widthsize,heightsize); 这个函数。**

4.确定View大小(onSizeChanged)

  @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
    }

5.确定子View布局位置(onLayout)

确定布局的函数是onLayout,它用于确定子View的位置,在自定义ViewGroup中会用到,他调用的是子View的layout函数。

child.layout(l, t, r, b);
//l View左侧距父View左侧的距离   getLeft();
//t View顶部距父View顶部的距离   getTop();
//r View右侧距父View左侧的距离   getRight();
//b View底部距父View顶部的距离   getBottom();
Android自定义View进阶:分类与流程_第1张图片

6.绘制内容(onDraw)

//onDraw是实际绘制的部分,也就是我们真正关心的部分,使用的是Canvas绘图。
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
    }

7.重点知识梳理

Android自定义View进阶:分类与流程_第2张图片
知识点

你可能感兴趣的:(Android自定义View进阶:分类与流程)