因此,在Android上进行捏合缩放似乎相当容易-但我也希望能够在图像超出边界时将其弹回,并且做到这一点最合理的方法似乎是当比例<1时,重新缩放为1。 然而,我似乎找不到从图形矩阵中检索比例的好方法。
一种可能的解决方案可能是使用矩阵的mapPoints函数映射点并查看它在哪里结束,但除了难以处理之外,它仅仅感觉很丑陋和间接。 有没有更好的解决方案来从Android图形矩阵中检索比例?
因此,在Android上进行捏合缩放似乎相当容易-但我也希望能够在图像超出边界时将其弹回,并且做到这一点最合理的方法似乎是当比例<1时,重新缩放为1。 然而,我似乎找不到从图形矩阵中检索比例的好方法。
一种可能的解决方案可能是使用矩阵的mapPoints函数映射点并查看它在哪里结束,但除了难以处理之外,它仅仅感觉很丑陋和间接。 有没有更好的解决方案来从Android图形矩阵中检索比例?
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
Matrix.MSCALE_X
代替0来表示“缩放X”索引。 - potatoeprivate 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]));
}