Android Scale растровое изображение - PullRequest
1 голос
/ 02 сентября 2011

Мое приложение содержит 9 растровых изображений в сетке 3х3.Все они отображаются на экране, и в зависимости от того, как пользователь взаимодействует с ними (касание, двойное касание, масштабирование, перетаскивание), изображение, на которое «воздействуют», должно выполнять различные задачи.

Так, например, если я коснусь одного изображения, оно должно полностью повернуться вокруг вертикального доступа, а затем остановиться.

В настоящее время я использую SurfaceView с методом onTouchEvent (..).Я подумал, что могу оживить это, масштабируя ширину изображения с 1 до -1 обратно до 1. Я пытался использовать матрицу, но не могу заставить изображение оставаться в центре на своем месте.Пожалуйста, помогите мне исправить это или предложите альтернативный / лучший способ сделать это.

Мой текущий код - просто тест.Если b истинно, то метод попытается масштабировать растровое изображение.Если b равно false, растровое изображение будет отображаться нормально .:

public void doDraw(Canvas canvas, boolean b)
{
    Matrix m = new Matrix();

    float scale = .5f;
    m.setScale(scale, 1f);
    m.postTranslate(mX,mY);

    if(!b)
        canvas.drawBitmap(mBitmap, mX, mY, null);
    else
        canvas.drawBitmap(mBitmap, m, null);
}

1 Ответ

1 голос
/ 02 сентября 2011

Попробуйте вместо postTranslate

matrix.preTranslate(-centerX, -centerY);
matrix.postTranslate(centerX, centerY);

, где centerX, Y - центр растрового изображения

ОБНОВЛЕНИЕ

, которое вы можетеиграть с graphics.camera на Android, который преобразует матрицу.Получите доступ к камере к основному виду (сетке) и переопределите getChildStaticTransformation.Получить матрицу преобразования.t.getMatrix() и измените это.Вы можете переместить его куда угодно , так как это матрица из основного представления , но она предназначена только для визуализации этого конкретного потомка.

, поэтому сделайте что-то подобное

@Override
    protected boolean getChildStaticTransformation(View child, Transformation t) {
        Matrix matrix = t.getMatrix();
            int centerX = (child.getWidth() / 2);
            int centerY = (child.getHeight() / 2);
        t.clear();
        t.setTransformationType(Transformation.TYPE_MATRIX);
        mCamera.save();

        if (child == getChildAt(0)) {
            mCamera.translate(pixels to the right,pixels to the bottom,
                    to the z axis);
            mCamera.getMatrix(matrix);
            mCamera.restore();
            matrix.preTranslate(-centerX, -centerY);
            matrix.postTranslate(centerX, centerY);

        } 

        return true;
    }

Также не забудьте установить setStaticTransformationsEnabled(true);где-то до конструктора сетки

...