Я нахожу очень мало документации о том, как манипулируют объектами 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);
ВышеВращение настолько плохое, что пути на экране даже не перерисовываются.Если я использую закомментированное вращение, оно, по крайней мере, появляется на экране, но все еще далеко.Как я могу вращать пути так же, как вращается растровое изображение?Я думаю, что часть проблемы в том, что я не знаю, с какой координаты они вращаются, для начала я не нашел документации по этому вопросу.
Спасибо!
Мэтт.