huburt-Hu / NewbieGuide

Android 快速实现新手引导层的库,通过简洁链式调用,一行代码实现引导层的显示
Apache License 2.0
3.55k stars 519 forks source link

设置相对位置RelativeGuide方向为Gravity.TOP或者Gravity.BOTTOM,引导页的宽度是以高亮view的左边对齐,导致引导页宽度显示不正确 #118

Closed wushaoge closed 5 years ago

wushaoge commented 5 years ago

设置相对位置RelativeGuide方向为Gravity.TOP或者Gravity.BOTTOM,引导页的宽度是以高亮view的左边对齐,导致引导页宽度显示不正确

wushaoge commented 5 years ago

看了下代码。不算是BUG吧。源码里面的相对布局是这样填充的,设置为Gravity.TOP或者BOTTOM,填充的引导页view的距离左边是以高亮view的left计算的,设置为Gravity.LEFT或者RIGHT,填充的引导页view的距离高度是以高亮view的top计算的。碰到的问题 avatar 引导页的位置相对右上方头像的位置为Gravity.BOTTOM,导致引导页宽度为高亮view的右侧大小,显示的宽度不对。

如果想要宽度和高度占满屏幕可以修改源码RelativeGuide中

 private MarginInfo getMarginInfo(@LimitGravity int gravity, ViewGroup viewGroup, View view) {
        MarginInfo marginInfo = new MarginInfo();
        RectF rectF = highLight.getRectF(viewGroup);
        switch (gravity) {
            case Gravity.LEFT:
                marginInfo.gravity = Gravity.RIGHT;
                marginInfo.rightMargin = (int) (viewGroup.getWidth() - rectF.left + padding);
//                marginInfo.topMargin = (int) rectF.top;
                marginInfo.topMargin = 0;
                break;
            case Gravity.TOP:
                marginInfo.gravity = Gravity.BOTTOM;
                marginInfo.bottomMargin = (int) (viewGroup.getHeight() - rectF.top + padding);
//                marginInfo.leftMargin = (int) rectF.left;
                marginInfo.leftMargin = 0;
                break;
            case Gravity.RIGHT:
                marginInfo.leftMargin = (int) (rectF.right + padding);
                marginInfo.topMargin = (int) rectF.top;
//                marginInfo.topMargin = 0;
                break;
            case Gravity.BOTTOM:
                marginInfo.topMargin = (int) (rectF.bottom + padding);
//                marginInfo.leftMargin = (int) rectF.left;
                marginInfo.leftMargin = 0;
                break;
        }
        return marginInfo;
    }

建议加入相关控制,Gravity.PARENT_RIGHT、Gravity.PARENT_LEFT、Gravity.PARENT_TOP、Gravity.PARENT_BOTTOM等属性来进行控制