Как узнать масштаб графической матрицы в Android

Таким образом, было довольно легко сделать щепотку увеличения в андроиде - но я также хотел бы иметь возможность привязать изображение, когда оно выходит из и сделать это наиболее разумным, по-видимому, делать такие вещи, как когда масштаб & 1, перемасштабирование до 1. Однако я не могу найти хороший способ получить масштаб из графической матрицы.

Одним из возможных решений может быть сопоставление точки с помощью функции map mapPoints и посмотреть, где она заканчивается, но в дополнение к тому, что она обманчива, это просто кажется уродливым и косвенным для меня. Есть ли лучшие решения для получения масштаба из графической матрицы Android?

Ответы

Ответ 1

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

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

вероятно, будет тем, что вы ищете. указанные значения будут следующими:

0: масштаб X

1: Skew X

2: Перевести X

3: Масштаб Y

4: Skew Y

5: Перевести Y

6: Перспектива 0

7: Перспектива 1

8: Перспектива 2

Ответ 2

Вот простой способ для записи содержимого матрицы:

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]));
}