自定义View(一)

本文详细解析了MeasureSpec类及其在Android视图测量过程中的应用。MeasureSpec是一个32位整数,用于指示视图应如何测量自身大小。文章还介绍了三种测量模式:EXACTLY、AT_MOST和UNSPECIFIED,并探讨了View和ViewGroup如何根据这些模式进行测量和布局。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • MeasureSpec类
    是一个32位int值 高2位为测量模式 低30位为测量的大小

  • 测量模式
    EXACTLY(精确模式)
    当属性为具体值时,系统使用的模式

  • AT_MOST(最大值模式)
    当属性为wrap_content时

  • UNSPECIFIED(未指明的)

View的测量

  • 重写on Measure( )方法

系统最终会调用setMeasuredDimension(int widthMeasureSpec, int heightMeasureSpec)方法

ViewGroup的测量

当ViewGroup属性为wrap_content时会遍历子View,获得所有子View的大小,从而决定自己的大小,其它模式会通过具体值来设置自身的大小

测量完毕后确定位置也同样是遍历调用子View的layout( )方法并指定其具体显示位置,从而决定其布局的位置

自定义ViewGroup需要重写onlayout( )方法来控制其子View显示位置逻辑,如果需要支持wrap_content属性需重写onMeasure( )方法

View的绘制

onDraw(Canvas canvas)方法

ViewGroup的绘制

一般不需要,但会调用ViewGroup的dispatchDraw( )方法来绘制其子View,过程还是遍历子View,调用子View的绘制方法来完成绘制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值