Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android画布旋转:需要旋转*x度而不是*到*x度_Android_Rotation_Android Canvas - Fatal编程技术网

Android画布旋转:需要旋转*x度而不是*到*x度

Android画布旋转:需要旋转*x度而不是*到*x度,android,rotation,android-canvas,Android,Rotation,Android Canvas,画布中旋转方法的文档说明degrees参数是“旋转量,以度为单位”。然而,根据我的经验,这是一种误导。例如,如果我在位图处于标准垂直方向(即θ=0,即12:00)时调用旋转(45),则位图会尽职尽责地相对于0旋转45度。如果我再次调用rotate(45),图像不会[看起来]移动。如果我随后调用旋转(-45),位图不会返回其原始方向,而是相对于0旋转-45度。换句话说,degrees参数是绝对的(“旋转到45度”),而不是文档中暗示的相对的(“旋转45度”)。这正是我不想要的 从给定的方向,我希望

画布中旋转方法的文档说明degrees参数是“旋转量,以度为单位”。然而,根据我的经验,这是一种误导。例如,如果我在位图处于标准垂直方向(即θ=0,即12:00)时调用旋转(45),则位图会尽职尽责地相对于0旋转45度。如果我再次调用rotate(45),图像不会[看起来]移动。如果我随后调用旋转(-45),位图不会返回其原始方向,而是相对于0旋转-45度。换句话说,degrees参数是绝对的(“旋转到45度”),而不是文档中暗示的相对的(“旋转45度”)。这正是我不想要的

从给定的方向,我希望能够将位图旋转+/-x度,其中+当然是顺时针旋转。我想,一种假装的方法是,为了下一次旋转的目的,在我旋转到“新0”(即,它实际上占据了12:00)的任何地方都进行标记。我的问题是:我如何做到这一点,或者,有没有更好的方法来实现我想要的


非常感谢。

一个简单的方法是将最后一次旋转存储为变量,并+/-下一次旋转-当然要注意不要超过360度。

我认为
canvas.setMatrix(canvas.getMatrix())
将“保存”您在旋转“新0”时所做的所有更改。但就你提到的目的而言,德布雷森的建议是经济的

可以使用简单的模360运算符检查上界;)@埃里克-是的,非常好。“我没有想到这点。@dbryson:是的,作为一种黑客,我已经在这么做了。问题是我可能不得不超过+/-360度。我有一个理由可以考虑画布。旋转工作的这种方式是因为传感器服务提供了绝对旋转度。至于你的问题的解决方案,我总是从最简单的可行的事情开始:-)。这不一定是“黑客”。但我不明白你怎么会超过360度。另一件事是,我总是想要连续旋转之间的最小角度。所以,如果第一次旋转到-170,第二次旋转到170,我想逆时针旋转20度(即到-190),而不是240度。你可能会认为它是一个无限的度数。新的位置只在与旧位置的差异最小的情况下才是重要的。这非常有趣,我将不得不使用它。在按照dbryson&co对缓存的旋转进行了几个小时的黑客攻击之后,我仍然在艰难地运行,在这种情况下,我接近+360,然后又超越了。要么我会弄明白,要么我会决定它比绝对需要的更复杂。谢谢大家的帮助