我有一个 ImageView,可以使用一根手指拖动或两个手指缩放,这很好用。我已经扩展了它来处理旋转,但是它的行为引起了一些混淆。
当出现多点触摸事件时,将调用此方法,应返回旋转角度(以度为单位)。它没有做我期望的事情。
private int fingersAngle(MotionEvent event)
{
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
int degrees = (int)(Math.toDegrees(Math.atan2(y, x)));
return degrees;
}
当我旋转这两个手指时,我期望的输出是:
158 166 168 169 174 176 179 181 等等
但实际上我得到的却像这样:
158 166 -179 179 -179 179 -179
问题似乎出在符号上。这个方法如何知道它是180还是-180,或者是90还是-270呢?图像经常旋转错误的方向,然后突然跳转并开始旋转相反的方向。更糟糕的是,它最初旋转的方向实际上是随机的。
我正在使用Nexus One测试应用程序,但在Advent Vega平板电脑上也遇到了同样的问题。这两个设备都可以使用Google Maps中的3D功能旋转屏幕(有时会有点抖动),因此证据并不表明存在硬件限制。
一个次要的问题是,当这两个手指大致垂直或水平对齐时,角度根本不会改变,因此旋转会“卡住”约10-20度的顶部/底部/左侧/右侧。
目前,我正在检查角度是否突然发生了巨大变化,如果是,就从360中减去它。虽然很丑陋,但有点帮助。
希望你们中的一位以前见过这种情况,并知道如何从多点触摸手势中提取角度旋转。
在Android中有些东西非常容易,令人惊讶的简单,但像这样的东西却非常痛苦。