自定义View笔记(一)

自定义View构造方法

例子:自定义TextView

  • 构造函数会在代码里面new的时候调用
//TextView tv = new TextView(this);
public TextView(Context context){
    super(context);
}
  • 在布局layout中使用时调用
public TextView(Context context,AttributeSet attrs){
    super(context,attrs);
}
  • 在布局layout中使用时,自定义样式style
public TextView(Context context,AttributeSet attrs,int defStyleAttr{
    super(context,attrs,defStyleAttr);
}

onMeasure()

自定义View的测量方法 布局的宽高由这个方法指定

获取宽高的模式

int widthMode = MeasureSpec.getMode(widthMeasure)
int heightMode =MeasureSpec.getMode(heightMeasure)
  • MeasureSpec.AT_MOST
    在布局中指定wrap_content

  • MeasureSpec.EXACTLY
    在布局中指定具体的值

  • MeasureSpec.UNSPECIFIED
    尽可能的大

onDraw() 用于绘制

onTouchEvent() 用于事件处理 要return true才有完整的事件分发流程(责任链模式)

自定义属性

  1. 自定义属性是用来配置的,在attrs.xml中去配置相应的属性
//格式:string 文字 color 颜色 dimension 宽高
//字体大小 integer refercence 资源(drawable)



//枚举

    
    

  1. 在布局中使用 记得声明命名空间
  2. 在代码中获取自定义属性
//xxx为在style里面定义的自定义属性
TypedArray array = context.obtainStyledAttributes(attrs,R.styleable.xxx);
int Color = array.getColor(R.styleable.xxx,Color);
int mTextSize = array.getDimensionPixelSize(R.styleable.xxxx_textSize,mTextSize)
//记得回收♻️
array.recycle();

你可能感兴趣的:(自定义View笔记(一))