给定自定义视图的长宽比以及父级的宽度和高度,如何查找自定义视图的最大宽度?

时间:2020-04-04 08:48:50

标签: java android view

我有一个自定义视图(点矩阵显示),我想占据其父级的最大可用宽度。

但是为了尊重某些表单参数(一种纵横比),必须计算此自定义视图的高度(取决于其宽度)。

如果此计算的高度超过其父代的最大高度,则必须相应减小自定义视图的宽度。 我是通过二进制搜索做到的:

private BiDimensions getMaxDimensions(int proposedWidth, int proposedHeight) {
    int xTop = proposedWidth;
    int hMax = proposedHeight;
    int xMin = 0;
    int xCand = 0;
    int yCand = 0;
    int oldX = 0;
    int x = xTop;
    do {
        setupDimensions(dimensionsSetTemp, x);
        int y = dimensionsSetTemp.height;
        if (y <= hMax) {
            xCand = x;   //  On a un nouveau candidat !
            yCand = y;
            if ((x == xTop) || (y == hMax)) {   //  Parfait !
                break;
            }
            xMin = x;   //  Examiner maintenant l'intervalle [x,xTop]
        } else {   //  y > hMax
            xTop = x;    // Examiner maintenant l'intervalle [xMin,x]
        }
        oldX = x;
        x = (xMin + xTop) / 2;
    } while (x != oldX);   //  Si x=oldX, on ne progresse plus => Accepter le dernier candidat

    maxDimensions.width = xCand;
    maxDimensions.height = yCand;
    return maxDimensions;
}

在上述代码中,在 onMeasure(int widthMeasureSpec,int heightMeasureSpec) onSizeChanged(int w,int h,int oldw,int oldh)期间调用:

  • BiDimensions 是包含宽度和高度字段的简单类

  • setupDimensions 是一个用于计算内部尺寸并填充简单类(dimensionsSetTemp)的某些字段的过程,其中包括尊重其长宽比所需的高度,具体取决于可用宽度( x)

  • 查找间隔是从xMin到xTop,检查中点并计算下一个间隔

  • 最后一个合适的候选对象是xCand(宽度)和yCand(对应的高度),它们都尊重hMax(最大高度)

有更好的方法吗?

谢谢

0 个答案:

没有答案
相关问题