Android中View的测量与View的绘制

本文详细解析了Android中View的测量与绘制过程。在测量阶段,重点介绍了MeasureSpec类及其三种模式(EXACTLY、AT_MOST、UNSPECIFIED),并展示了如何在自定义View时重写onMeasure()方法。在绘制阶段,阐述了Canvas对象的重要性,以及如何通过Canvas和Paint进行图形绘制。通过对onDraw()方法的使用,展示了如何在Android界面上创建和修改图形。
摘要由CSDN通过智能技术生成

一、View的测量

Android系统在绘制View前,必须对View进行测量。即告诉系统该画一个多大的View。这个过程在onMeasure()方法中进行

Android系统给我们提供了一个设计短小精悍却功能强大的类——MeasureSpec类,通过它来帮助我们测量View。MeasureSpec是一个32位int值,其中高2位测量的模式低30位测量的大小,在计算中使用位运算的原因是为了提高并优化效率

测量的模式可以为以下三种:

(1) EXACTLY
精确值模式,当我们将控件的layout_width属性或layout_height属性指定为具体数值时,比如android:layout_width=“100dp”,或者指定为match_parent属性时(占据父View的大小),系统使用的是EXACTLY模式。

(2) AT_MOST
最大值模式,当控件的layout_width属性或layout_height属性指定为wrap_content时,控件大小一般随着控件的子控件或内容的变化而变化,此时控件的尺寸只要不超过父控件允许的最大尺寸即可

(3) UNSPECIFIED
这个属性比较奇怪——它不指定其大小测量模式,View想多大就多大,通常情况下在绘制自定义View时才会使用。

注:
View类默认的onMeasure()方法只支持EXACTLY模式,所以如果在自定义控件的时候不重写onMeasure()方法的话,就只能使用EXACTLY模式控件可以响应你指定的具体宽高值或者是match_parent属性。而如果要让自定义View支持wrap_content属性,那么就必须重写onMeasure()方法来指定wrap_content时的大小。

通过MeasureSpec这一个类,我们就获取了View的测量模式和View想要绘制的大小。有了这些信息,我们就可以控制View最后显示的大小。

下面来看一个简单的实例,演示如何进行View的测量。首先,要重写onMeasure()方法,该方法如下所示:

@Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
   
        super.onMeasure(widthMeasureSpec, heightMeasureSp
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值