3

だから私は、ユーザーが画面に触れたときに指を動かした方向を検出したい 現在、3つの方向で機能していますが、「上」の動きは呼び出されません。

これは私のコードです:

@Override
public boolean onTouchEvent(MotionEvent event) {

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
    // store the X value when the user's finger was pressed down
    downXValue = event.getX();
    downYValue = event.getY();
    break;
}

case MotionEvent.ACTION_UP: {
    // Get the X value when the user released his/her finger
    float currentX = event.getX();
    float currentY = event.getY();
        //check if horizontal or vertical movement was bigger
    if (Math.abs(downXValue - currentX) > Math.abs(downYValue)
        - currentY) {
    Log.e("motionevent", "x");
    // going backwards: pushing stuff to the right
    if (downXValue < currentX) {
        Log.e("motionevent", "right");

    }

    // going forwards: pushing stuff to the left
    if (downXValue > currentX) {
        Log.e("motionevent", "left");

    }

    } else {
    Log.e("motionevent", "y");
    if (downYValue < currentY) {
        Log.e("motionevent", "up");

    }
    if (downYValue > currentY) {
        Log.e("motionevent", "down");

    }
    }
    break;
}
}

    return true;
}

水平方向または垂直方向の動きのチェックに問題はありますか? 私が上に移動するたびに、右または左が呼び出されるためです。ダウンは正常に動作します。

4

2 に答える 2

17

移動計算に誤りがあります。私はそれを修正しました、今は大丈夫です。

switch (event.getAction()) {

                case MotionEvent.ACTION_DOWN: {
                    // store the X value when the user's finger was pressed down
                    downXValue = event.getX();
                    downYValue = event.getY();
                    Log.v("", "= " + downYValue);
                    break;
                }

                case MotionEvent.ACTION_UP: {
                    // Get the X value when the user released his/her finger
                    float currentX = event.getX();
                    float currentY = event.getY();
                    // check if horizontal or vertical movement was bigger

                    if (Math.abs(downXValue - currentX) > Math.abs(downYValue
                            - currentY)) {
                        Log.v("", "x");
                        // going backwards: pushing stuff to the right
                        if (downXValue < currentX) {
                            Log.v("", "right");

                        }

                        // going forwards: pushing stuff to the left
                        if (downXValue > currentX) {
                            Log.v("", "left");

                        }

                    } else {
                        Log.v("", "y ");

                        if (downYValue < currentY) {
                            Log.v("", "down");

                        }
                        if (downYValue > currentY) {
                            Log.v("", "up");

                        }
                    }
                    break;
                }

            }
于 2012-09-06T11:20:45.727 に答える
3

GestureDetector.OnGestureListenerスクロール、フリングなど、タッチイベントを検出するためのいくつかの方法を提供するインターフェースを使用できます。

使用法:

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (detector == null) {
        detector = new GestureDetector(this);
    }
    return detector.onTouchEvent(event);
}

これからは、すべてのイベントが認識され、指定されたメソッドに渡されます。

于 2012-09-06T10:44:57.737 に答える