我有一个带有GestureDetector的Xamarin Android应用程序。在我的设备(索尼Xperia S5303)和模拟器中它工作正常。但是,在三星Galaxy平板电脑上,OnSingleTapUp事件会被触发两次,即使我只触摸屏幕一次。由于事件由OnSingleTapConfirmed检查,并且设备的行为就像两次点击一样,因此永远不会调用以下方法:
public bool OnSingleTapUp(MotionEvent e)
{
if (PersistentContext.LoggedPlayer.Token)
{
if (simpleOnGestureListener.OnSingleTapConfirmed(e))
{
Move(e);
}
return true;
}
return false;
}
奇怪的是,单击按钮时,按钮方法只调用一次。谁能告诉我可能导致这种奇怪行为的原因以及如何避免这种行为?
答案 0 :(得分:1)
您需要使用onSingleTapConfirmed(MotionEvent event)
代替。这样android可以确保它只需点击一次,并且不会两次触发事件。
修改:如果您决定使用onSingleTapUp(MotionEvent event)
,那么您可以使用event.getEventTime()
,如果第一个和第二个事件之间的时差小于THRESHOLD, 200毫秒或者其他什么,认为这是不必要的第二次点击并忽略它。
编辑2:由于我不使用Xamarin,我可能完全错了,但我认为你需要像这样更改代码:(我的意思是完全忘记onSingleTapUp并将整个代码移动到onSingleTapConfirmed )
@Override
public boolean onSingleTapConfirmed(MotionEvent event) {
if (PersistentContext.LoggedPlayer.Token)
{
Move(e);
return true;
}
return false;
}
希望它有所帮助,祝你好运!