自定义view onMeaure

自定义view onMeaure

记录一下今天的学习,看的很多,但是太过鱼龙混杂,也在这里写一下我对这个的理解

  • 自定view:通过继承view或者系统控件,实现更多的拓展功能。
  • 一个完整的自定义view需要实现onMeaure,onLayout,onDraw方法,正如我们所想的,当我们需要绘制一个view时候,首先需要对其进行测量大小,确定其大小,用到onMeaure,当大小确定过后,这个控件如何摆放,就需要调用onLayout,最后再对其进行onDraw方法。

    onMeaure方法

    在 onMeaure的父类方法中,已经有写好的方法,直接通过super调用就可以

protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec)  
    {  
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);  
    }  

其中传入了widthMeasureSpec和widthMeasureSpec,说到这里就需要了解一下MeasureSpec类,MeasureSpec是sdk提供的用来存储控件的size和mode的类,我们可以直接用如下代码进行调用

    int widthMode = MeasureSpec.getMode(widthMeasureSpec);  
    int widthSize = MeasureSpec.getSize(widthMeasureSpec);  
    int heightMode = MeasureSpec.getMode(heightMeasureSpec);  
    int heightSize = MeasureSpec.getSize(heightMeasureSpec);  

那我们得到这个有什么用呢,
MeasureSpec的specMode一共有三种类型,
EXACTLY:一般是设置了明确的值或者是MATCH_PARENT
AT_MOST:表示子布局限制在一个最大值内,一般为WARP_CONTENT
UNSPECIFIED:表示子布局想要多大就多大,很少使用

当在布局文件中指定了确定的值时候,他的类型就是EXACTLY即确定的,这时候也可根据需要对其进行更改。
当在布局文件中指定为WARP_CONTENT时候,将会默认的根据父类的宽度和高度来进行测量,所以我们需要对其进行测量,得到我们需要的结果,如TextView,当指定为WARP_CONTENT时候将会对其进行判断,从而仅仅规划出适合字体那样的大小来进行显示。

当得到了这些值过后,就可以根据自己的需要通过 setMeasuredDimension(width, height)中传入width,和height进行相关的计算操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值