2011-05-18 113 views
3

Canvas中旋转方法的文档指出度数参数是“要旋转的量(度)”。然而,根据我的经验,这是误导。例如,如果当我的位图处于垂直方向(即θ= 0,即12:00)时我调用旋转(45),则位图相对于0忠实地旋转45度。如果我再次调用要旋转(45),图像不会[移动]。如果我然后调用旋转(-45),则位图不会返回到其原始方向,而是相对于0旋转-45度。换句话说,度参数是绝对的(“旋转到45度” ),而不是相对的(“旋转45度”),如文件所暗示的。这正是我不想要的。Android帆布旋转:需要旋转* x *度不* x *度

从给定的方向,我希望能够旋转我的位图BY +/- x度,其中+当然是顺时针旋转。假设这种假设的一种方法是,无论我旋转到“新的0”(即它实际上占用了12点),以用于下一次旋转的目的。我的问题是:我该怎么做,或者,有没有更好的方法来实现我想要的?

非常感谢。

回答

2

一个简单的方法是将存储最后的旋转作为变量和+/-旁边转动它 - 看着你当然不超越360

+0

你可以检查上限与一个简单的模数360运算符;) – Eric 2011-05-18 23:23:28

+0

@eric - 是的非常好。没想到这一点。 – dbryson 2011-05-18 23:27:16

+0

@dbryson:是的,这就是我现在做的一种破解。问题是我可能必须超过+/- 360. – Urthas 2011-05-18 23:42:52

1

我认为canvas.setMatrix(canvas.getMatrix())会“拯救”的全部您所做的更改可以让您在任何地方旋转'新0'。但是dbryson的建议对于你提到的目的来说是经济的。

+0

这是非常有趣的,我将不得不玩。在经过dbryson&co的缓存轮转攻击几个小时后,我仍然很努力地投入到接近+ -360的情况下,然后超越。要么我会弄清楚,否则我会认为它比绝对需要更复杂。谢谢大家的帮助 – Urthas 2011-05-19 02:46:22