Android:继承的View Scale

时间:2017-11-06 02:08:10

标签: java android android-layout

简单问题:我有一个包含多个子对象的RelativeLayout,其中一个是另一个带有几个子对象的Layout。 RelativeLayout可以通过用户选择进行扩展,也可以扩展其子级。我需要得到一个子对象的比例因子,但即使父(或祖父母)被缩放,它总是返回1.0。所以我需要一种方法来找出对象的显示的比例,而不是它的 set 比例。没有手动检查父对象列表及其比例的任何方法吗?提前谢谢!

1 个答案:

答案 0 :(得分:1)

我相信我已经弄明白了。我就是这样做的。

public static float[] getInheritedScale(@NonNull View v)
{
    if(v.getParent() == null || !(v.getParent() instanceof View)){
        return new float[]{v.getScaleX(), v.getScaleY()};
    }

    float[] coords = new float[2];

    coords[0] = v.getScaleX();
    coords[1] = v.getScaleY();

    // Iterate through the View's family tree, getting each parent View's scale and calculating
    // it into the total scale factor.
    boolean done = false;
    View current = (View)v.getParent();
    while(!done)
    {
        coords[0] = coords[0] * current.getScaleX();
        coords[1] = coords[1] * current.getScaleY();

        // Check that we have not reached the top of the tree. If we have, set the done flag.
        if(current.getParent() != null && current.getParent() instanceof View){
            current = (View)current.getParent();
        }else{
            done = true;
        }
    }

    return coords;
}

这适用于我尝试过的每一种情况。它返回传递给它的视图的显示(或明显)比例(X / Y)。