自定义view之layout()与onLayout()方法

本文详细解析了Android自定义View中layout()与onLayout()两个关键方法。layout()方法用于设置View的位置,更新mLeft, mTop, mRight, mBottom并触发重绘;onLayout()则是ViewGroup对子View布局的抽象方法,必须在ViewGroup中实现,用于安排子View的位置。requestLayout()则用于在需要时重新布局。" 116594208,10545855,Linux 网络丢包问题排查与解决,"['Linux', '网络监控', '系统诊断', '网络维护']
摘要由CSDN通过智能技术生成

layout()与onLayout()

layout()与onLayout()两个方法是在view的layout(布置)过程中最重要的两个方法。onLayout()在layout()方法内部被调用。首先看看layout()方法的实现:

layout()方法的实现

public void layout(int l, int t, int r, int b) {
    //确保测量工作已经完成
    if ((mPrivateFlags3 & PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT) != 0) {
        onMeasure(mOldWidthMeasureSpec, mOldHeightMeasureSpec);
        mPrivateFlags3 &= ~PFLAG3_MEASURE_NEEDED_BEFORE_LAYOUT;
    }

    //保存旧的位置坐标
    int oldL = mLeft;
    int oldT = mTop;
    int oldB = mBottom;
    int oldR = mRight;

    //重点步骤,changed表示该view的尺寸或位置是否发生了改变
    boolean changed = isLayoutModeOptical(mParent) ?
            setOpticalFrame(l, t, r, b) : setFrame(l, t, r, b);

    //如果changed为true或是需要重新布置(比如measure过程结束)
    if (changed || (mPrivateFlags & PFLAG_LAYOUT_REQUIRED) == PFLAG_LAYOUT_REQUIRED) {
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值