美文网首页
自定义View笔记(一)

自定义View笔记(一)

作者: 六花垂冰丸 | 来源:发表于2019-02-24 17:58 被阅读0次

    自定义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)
    
    <attr name="text" format="string"/>
    <attr name="background" format="reference|color"/>
    //枚举
    <attr name="inputType">
        <enum name="number" value="1"/>
        <enum name="text" value="2"/>
    <attr/>
    
    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笔记(一)

          本文链接:https://www.haomeiwen.com/subject/duebyqtx.html