如何在安卓中查找图形矩阵的规模

21

因此,在Android上进行捏合缩放似乎相当容易-但我也希望能够在图像超出边界时将其弹回,并且做到这一点最合理的方法似乎是当比例<1时,重新缩放为1。 然而,我似乎找不到从图形矩阵中检索比例的好方法。

一种可能的解决方案可能是使用矩阵的mapPoints函数映射点并查看它在哪里结束,但除了难以处理之外,它仅仅感觉很丑陋和间接。 有没有更好的解决方案来从Android图形矩阵中检索比例?


请注意,在矩阵中,比例和缩放是非常不同的,请参考此答案https://dev59.com/sWjWa4cB1Zd3GeqPmwkR。 - Artur
2个回答

58
float[] f = new float[9];
matrix.getValues(f);

float scaleX = f[Matrix.MSCALE_X];
float scaleY = f[Matrix.MSCALE_Y];

这可能是您正在寻找的。给出的值将如下:

0:缩放 X

1:倾斜 X

2:平移 X

3:缩放 Y

4:倾斜 Y

5:平移 Y

6:透视 0

7:透视 1

8:透视 2


4
谢谢,我之前也忽略了文档的这一部分。如果你要使用它,最好使用Matrix类提供的常量。例如,使用Matrix.MSCALE_X代替0来表示“缩放X”索引。 - potatoe
请注意,位置3是Skew-Y,而不是Scale-Y。这进一步证明了使用常量更好的事实。 - scottt

0
这是一个记录矩阵内容的简单方法:
private void logMatrix(String label, Matrix matrix) {
    float[] matrixVals = new float[9];
    matrix.getValues(matrixVals);
    Log.e(TAG, String.format("%s: %s\nscale (x,y) = (%f, %f)\ntranslate (x,y) = (%f, %f)\nskew (x,y) "
                             + "= (%f, %f)\nperspective-0 = %f\nperspective-1 = %f\nperspective-2 = %f",
        label, matrix, matrixVals[Matrix.MSCALE_X], matrixVals[Matrix.MSCALE_Y],
        matrixVals[Matrix.MTRANS_X], matrixVals[Matrix.MTRANS_Y],
        matrixVals[Matrix.MSKEW_X], matrixVals[Matrix.MSKEW_Y],
        matrixVals[Matrix.MPERSP_0], matrixVals[Matrix.MPERSP_1], matrixVals[Matrix.MPERSP_2]));
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接