美文网首页
自定义ViewGroup

自定义ViewGroup

作者: _好好学习 | 来源:发表于2020-04-02 22:25 被阅读0次
    onMeasure()的重写
    1. 调用每个子View的measure(),让子View自我测量

    根据自己的MeasureSpec中mode的不同:

    1. EXACTLY/AT_MOST:可用空间(MeasureSpec)中的size
    2. UNSPECIFIED:可用空间:无限大
    1. 根据子View给出的尺寸,得出子View的位置,并保存他们的位置和尺寸

    关于保存子View位置的两点说明:

    1. 不是所有的Layout都需要保存子View的位置(因为有的Layout可以在布局阶段实时推导出子View的位置,例如LinearLayout)
    2. 有时候对某些子View需要重复测量两次或多次才能得到正确的尺寸和位置
    1. 根据子View的位置和尺寸计算出自己的尺寸,并用setMeasuredDimension()保存
    image.png
    onLayout()的重写

    Android官方标准的写法

        @Override
        protected void onLayout(boolean changed, int l, int t, int r, int b) {
            //  The layout has actually already been performed and the positions
            //  cached.  Apply the cached values to the children.
            final int count = getChildCount();
    
            for (int i = 0; i < count; i++) {
                View child = getChildAt(i);
                if (child.getVisibility() != GONE) {
                    RelativeLayout.LayoutParams st =
                            (RelativeLayout.LayoutParams) child.getLayoutParams();
                    child.layout(st.mLeft, st.mTop, st.mRight, st.mBottom);
                }
            }
        }
    
    onDraw()的重写

    这部分可根据实际业务场景需求去编写,也有些ViewGroup是没有重写该方法的,如RelativeLayout

    相关文章

      网友评论

          本文标题:自定义ViewGroup

          本文链接:https://www.haomeiwen.com/subject/xdqqphtx.html