Как получить направление перемещения пальца в телефоне на базе Android?

Я хочу получить направление перемещения пальца по сенсорному телефону Android. Если пользователь задвигает палец/вниз/левый/исправлять направление, я хочу получить это направление. Как я могу найти это?Спасибо.

22
задан understack 30 June 2010 в 11:27
поделиться

2 ответа

Реализуйте onTouchEvent(), и вычислите dx и dy по тому, где пользователь нажимает вниз и поднимает вверх. Вы можете использовать эти значения, чтобы определить направление движения.

float x1, x2, y1, y2, dx, dy;
String direction;
switch(event.getAction()) {
    case(MotionEvent.ACTION_DOWN):
        x1 = event.getX();
        y1 = event.getY();
        break;

    case(MotionEvent.ACTION_UP): {
        x2 = event.getX();
        y2 = event.getY();
        dx = x2-x1;
        dy = y2-y1;

        // Use dx and dy to determine the direction of the move
        if(Math.abs(dx) > Math.abs(dy)) {
            if(dx>0)
              direction = "right";
            else
              direction = "left";
        } else {
            if(dy>0)
              direction = "down";
            else
              direction = "up";
        }
    }
}
45
ответ дан 29 November 2019 в 04:01
поделиться

Лучше всего иметь дело с событиями MotionEvent, которые вы получаете от обратного вызова View.OnTouchListener (). События движения отслеживают, как вы в настоящее время взаимодействуете с представлением, с помощью его свойства действия.

Я полагаю, вы можете вычислить, в каком направлении кто-то скользит пальцем, исследуя свойство действия MotionEvents и значения x / y того места, где произошло событие движения.

switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            oldX= event.getX();
            oldY= event.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            int newX = motionEvent.getX();
            int newY = motionEvent.getY();

            int deltaX = oldX - newX;
            int deltaY = oldY - newY;

            if(Math.abs(deltaY)>Math.abs(deltaX))
              //Motion in Y direction.
            else
              // Motion in X direction.
            break;
         }

Есть много других методов, доступных для объекта MotionEvent: http://developer.android.com/reference/android/view/MotionEvent.html

10
ответ дан 29 November 2019 в 04:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: