1

MapView に onTouchEvent を実装してジオポイントを更新しようとしていますが、ACTION_UP のみをキャッチして画面に触れると、3 回起動します。この状態でコードを 1 回実行するにはどうすればよいですか?

@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? もしそうなら、それはドキュメントの状態です:

戻り値:タップがこのオーバーレイによって処理された場合は true。

これは、ほぼすべてのイベント (onTouch、onKey など) の標準的な Android の動作です。イベントが処理された場合 (あなたの場合、AsyncTask を開始した場合) を返す必要がtrueあるため、Android はそれが処理されたことを認識します。

常に を返すfalseため、フレームワークはそれが処理されたかどうかを認識せず、アクションをイベント処理チェーンのさらに下にディスパッチします。なぜ正確に3回なのかはわかりません。

したがって、イベントを正常に処理した場合は、 を返しtrueます。

于 2012-10-21T21:48:13.180 に答える