0

MapActivity に OnTouchListener を実装しましたが、もちろん onTouch() メソッドをオーバーライドする必要がありました。

マップをタップしたときにのみ発火させたい - そうしないと、マップを移動することさえできない.

これが私のonTouchメソッドです:

@Override
public boolean onTouch(View v, MotionEvent e) {

    if (e.getAction() == MotionEvent.ACTION_DOWN) {

      // SOME ACTIONS ...

    }
    return true;
}
4

3 に答える 3

0

falseイベントをマップにも渡したい場合は、戻る必要があります。そうしないと、説明したように、マップはタッチ ジェスチャに反応しません。これは、戻るtrueということは、イベントを消費したことを意味するためです。

于 2012-09-27T09:49:12.283 に答える
0

これは古い質問であることは承知していますが、これを行う正しい方法はgetScaledTouchSlop()、ユーザーがスクロールしていると考える前に、タッチが移動できるピクセル単位の距離を返すを使用することです。

onTouch メソッドで次のように実装します。

@Override
    public boolean onTouch(final View v, MotionEvent event) {

        int mSwipeSlop = ViewConfiguration.get(context).
                    getScaledTouchSlop();
        switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            // DO
            break;
        case MotionEvent.ACTION_CANCEL:
            // DO
            break;
        case MotionEvent.ACTION_MOVE:
            {
                float x = event.getX() + v.getTranslationX();
                float deltaX = x - mDownX;
                float deltaXAbs = Math.abs(deltaX);
                float y = event.getY() + v.getTranslationY();
                float deltaY = Y - mDownY;
                float deltaYAbs = Math.abs(deltaY);
                float absDist = Math.sqrt(Math.pow(deltaXAbs, 2) + Math.pow(deltaXAbs, 2));
                if (!mSwiping) {
                    if (absDist > mSwipeSlop) {
                        mSwiping = true;
                    }
                }
            break;
        case MotionEvent.ACTION_UP:
            {
                if (mSwiping) {
                    // DO MOVE ACTIONS
                }
                else {
               // DO TAP ACTIONS
                }
            }
            break;
        default: 
            return false;
        }
        return true;
    };

開発者ページ: http://developer.android.com/reference/android/view/ViewConfiguration.html#getScaledTouchSlop()

于 2014-10-25T17:18:53.640 に答える