一、自定义View的基本步骤
本篇文章的核心知识点,并不是自定义View的全部讲解,主要是通过一个简单的demo了解自定义View的MeasureSpecMode模式。
自定义View基本分为自定义View和自定义ViewGroup。
自定义View的步骤:
- 继承View重写构造方法(有四个构造方法,不同的使用场景可以了解下)
- 自定义属性,在构造方法中初始化属性
- 重写onMeasure方法测量宽高
- 重写onDraw方法绘制控件
关于View的绘制流程中,三个核心的回调方法onMeasure、onLayout、onDraw,在自定义View的时候,onLayout方法基本不用,onLayout方法是在ViewGroup自定的时候需要重写的方法,这个也比较好解释,就不多做介绍。
下面看一个简单的自定义TextView的代码编写:
CTextView1.java
public class CTextView1 extends View {
private Paint mPaint;
//计算字体所需要的范围
private Rect mTextBounds;
private int color;
private String text;
//一般纯代码创建View的时候,可以使用这个构造函数
public CTextView1(Context context) {
this(context,null);
}
//加载布局文件的时候会调用
public CTextView1(Context context, @Nullable AttributeSet attrs) {
this(context, attrs,0);
}
public CTextView1(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, 0);
//自定义属性
TypedArray typedArray = context.obtainStyledAttributes(attrs,R.styleable.MNView);
color = typedArray.getInteger(R.styleable.MNView_mn_color,R.color.colorAccent);
text = typedArray.getString(R.styleable.MNView_mn_text);
typedArray.recycle();
//初始化画笔
mPaint= new Paint();
mTextBounds = new Rect();
mPaint.setColor(color);
mPaint.setTextSize(50);
//确定paint的绘制范围
mPaint.