如何在Android中找出图形矩阵的比例

时间:2011-03-04 19:06:20

标签: android graphics vector-graphics

所以,pinch zoom in android似乎相当容易 - 但我也希望能够在图像超出范围时快速恢复图像,并且这样做最合理的事情似乎是做比如尺度< 1,重新缩放为1.但是,我似乎找不到从图形矩阵检索比例的好方法。

一种可能的解决方案可能是使用矩阵的mapPoints函数映射一个点并查看它最终的位置,但除了诡计之外,这对我来说只是感觉丑陋和间接​​。有没有更好的解决方案从Android图形矩阵中检索比例?

2 个答案:

答案 0 :(得分:49)

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

答案 1 :(得分: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]));
}