Как повернуть путь так же, как растровое изображение - PullRequest
5 голосов
/ 04 марта 2012

Я нахожу очень мало документации о том, как манипулируют объектами Path, в частности вращение.

У меня есть приложение для рисования, в котором я пытаюсь включить функцию отмены.Каждый раз, когда палец пользователя касается вида, пока его палец не будет поднят - путь его пальца сохраняется как Path в ArrayList.Метод отмены выглядит так:

        public void undo() {
            //If nothing was drawn, do nothing
            int size = path_history.size();
            if (size == 0)
                return;

            //Draw the last saved bitmap
            setupView();

            //Loop through saved paths, don't paint last path - remove it
            for (int i=0; i<size-1; i++)
                canvas.drawPath(path_history.get(i), paint);
            path_history.remove(size-1);
            invalidate();
        }

Проблема в том, что это не работает после поворота экрана, потому что я перерисовываю растровое изображение, повернутое под углом 90 градусов (насколько это касается пользователярисунок никогда не вращается).Пути перерисовываются так, как если бы вид был в исходной ориентации, поэтому пути и исходное растровое изображение не синхронизированы.

Для компенсации я попытался:

Matrix m = new Matrix();
m.preRotate(90);
//I TRIED THIS TOO: m.preRotate(90, bitmap width / 2, bitmap height / 2);
for (int i=0; i<size-1; i++)
    path_history.get(i).transform(m);

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

Спасибо!

Мэтт.

...