自定义View

1、构造方法
xml布局默认会使用两个参数的构造方法,所以要将一个和两个参数的构造指向三个参数的构造方法(this)

2、获取自定义属性
使用R.styleable.MyAttrbute_Tittle,注意此处使用_且styleable并非attr。
记得回收TypedArray.

3、引入命名空间
添加xmlns:app="http://schemas.android.com/apk/res-auto",即可使用自定义属性

4、对于自定义View宽度和高度
默认情况:Wrap_Content、Match_parent----MATCH_PARNET
          指定宽度和高度----------------指定宽度高度显示

源码片段:        
    switch (specMode) {
        case MeasureSpec.UNSPECIFIED:
             result = size;
             break;
        case MeasureSpec.AT_MOST: ---------wrap_content
        case MeasureSpec.EXACTLY:----------match_parent
             result = specSize;
             break;
        }
对于设置了Wrap_content的时候,走的是EXACTLY(match_parent),
所以wrap_content需要自己测量,重写onMeasure()方法

5、对于onMeasure
一个MeasureSpec封装了父布局传递给子布局的布局要求,每个MeasureSpec代表了一组宽度和高度的要求。
一个MeasureSpec由大小和模式组成。
MeasureSpec的模式,三种类型:
    EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
    AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT
    UNSPECIFIED:表示子布局想要多大就多大,很少使用

重写onMeasure()方法,最终要setMeasuredDimension(width, height);

1) 对于AT_MOST(wrap_content):
     mHeight = Math.min(desireHeight,specHeight);
内部控件view需要的高度和父布局对子布局指定的高度的最小值  


6、自定View步骤
  1、自定义View的属性
  2、在View的构造方法中获得我们自定义的属性
  3、重写onMesure ]
  4、重写onDraw


7、API相关

canvas.drawBitmap(mImage1,null,mRect,mPaint);

中的Rect.left top right bottom 代表左上角坐标以及右下角坐标


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值