1

我正在尝试在 MapView 上实现 onTouchEvent 以更新地理点,但是当我触摸仅捕获 ACTION_UP 的屏幕时,它会触发 3 次。在这种情况下如何执行我的代码一次?

@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView) {
    int action = event.getAction();
    if (action == MotionEvent.ACTION_UP) {
        Log.e("Touch", Integer.toString(event.getAction()));
        //All 3 fires has index 1 that concern to ACTION_UP
        //Below will be AsyncTask call
    }
    return false;
}
4

1 回答 1

2

从方法签名中,我认为您的示例来自被覆盖的Overlay? 如果是这样,它的文档说明:

返回如果点击由此叠加层处理,则为真。

这是几乎所有事件(onTouch、onKey 等)的标准 android 行为。如果事件已处理(在您的情况下,您启动了 AsyncTask),您应该 return true,以便 Android 知道它已被处理。

由于您总是返回false,因此框架不知道它是否已被处理,并在事件处理链的下游进一步分派 Action。我不知道为什么它正好是三倍。

因此,如果您成功处理了该事件,请返回true.

于 2012-10-21T21:48:13.180 回答