【发布时间】:2020-03-29 14:57:38
【问题描述】:
我在旋转图像时需要帮助解决一个小问题(图像类)。
这个想法是旋转一个球形图像,移动是通过手指的触摸和拖动,它可能是或不是顺时针,到目前为止这工作正常。
我希望当球体的角度是 90 的倍数时发生一些事情,问题是当我用手指旋转球体时,有时它是如此之快,以至于球体的角度并不总是通过倍数90,例如,如果它在 87,当我移动我的手指时,它会转到 94,而不接触 90。
这是我的拖动旋转代码
tapeImage.addListener(new DragListener() {
int initDegree;
@Override
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button) {
initDegree = (int) new Vector2(x, y).sub(new Vector2(tapeImage.getOriginX(), tapeImage.getOriginY())).angle();
return true;
}
@Override
public void touchDragged(InputEvent event, float x, float y, int pointer) {
int touchDegree = (int) (new Vector2(x, y).sub(new Vector2(tapeImage.getOriginX(), tapeImage.getOriginY()))).angle();
tapeImage.rotateBy(touchDegree - initDegree);
}
});
我知道捕捉这一点的最佳方法是将旋转增加 1 但这不会跟随手指速度,所以我想知道是否有更好的方法来捕捉旋转事件,感谢您的帮助。
更新
情况:(灰色球体代表当前黄色球体角度)我顺时针转动黄色刻度盘,当黄色球体角度为90的倍数时,会发生事件x,可以保持在事件发生时旋转球体,所以如果你继续转动,你将到达下一个 90 的倍数,同样的事件将再次发生,我使用 rotateBy 方法,为对象的当前角度增加一个角度,问题是,如果我将球体移动得太快,它的角度会跳跃,从而阻止它达到 90 的倍数,正如我之前所说,这可以通过简单地增加 1 来纠正,但是球体会比我的手指慢得多.
我需要的是当球体的角度朝向这 4 个侧面之一时发生事件,无论您移动球体的速度有多快,也许使用 90 的倍数检测它并不是最好的了解方式角度在哪一边,或者我应该使用rotateBy以外的方法?
【问题讨论】:
-
我相信你看错了。您期望用户的手势/手指准确地停在 90 以触发新行为。行为会有所不同是 89、90 还是 91?
-
不,它不一定要停在 90 的倍数,它可以经过 90 并继续转动,直到它到达下一个 90 的倍数并再次发生事件,我说的是倍数90,因为这是我能想到知道何时启动某个动作的唯一方法
-
那么如果监听器收到 94,你可以算出你超过 90 的球体。然后触发更改
-
我试过了还是不行,你说的我明白了,但是我无法正确转码
-
我无法真正快速设置一个 android 环境。因此,请检查以下内容:首先发生的两个事件?好像很拖沓。您需要一种方法来跟踪最后一个学位。从 91 到 170 的更改不应该触发更改。通过两者之间的差异,您可以确定是否已跨越 90 * x