Вращение Android-холста: нужно поворачивать * на * x градусов, а не * на * x градусов - PullRequest
3 голосов
/ 19 мая 2011

В документации по методам поворота в Canvas говорится, что параметр градус - это «количество поворотов в градусах». Однако, по моему опыту, это вводит в заблуждение. Например, если я вызываю rotate (45), когда мое растровое изображение находится в канонически вертикальной ориентации (т.е. theta = 0, то есть в 12:00), то растровое изображение покорно поворачивается на 45 градусов по отношению к 0. Если я делаю второй вызов чтобы повернуть (45), изображение не движется. Если я затем сделаю вызов для поворота (-45), растровое изображение не вернется к своей первоначальной ориентации, а вместо этого будет повернуто на -45 градусов относительно 0. Другими словами, параметр градусов является абсолютным («повернуть на 45 градусов»). ), не относительный («поворот на 45 градусов»), как следует из документации. Это именно то, чего я не хочу.

Исходя из заданной ориентации, я хочу иметь возможность поворачивать мое растровое изображение BY +/- x градусов, где +, конечно, вращение по часовой стрелке. Я полагаю, что один из способов подделать это - сделать везде, где я вращаюсь, до «нового 0» (т. Е. Оно фактически занимает 12:00) для целей следующего поворота. У меня вопрос: как мне это сделать или есть лучший способ добиться того, чего я хочу?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

Одним из простых подходов было бы сохранить последний поворот как переменную и +/- следующий поворот к ней - наблюдая, конечно, что вы не выходите за рамки 360.

1 голос
/ 19 мая 2011

Я думаю, canvas.setMatrix(canvas.getMatrix()) 'сохранит' все внесенные вами изменения, делая везде, где вы вращали 'новый 0'. Но предложение dbryson является экономичным для той цели, о которой вы упомянули.

...