Подтвердить что ты не робот

Как захватить направление движения пальцев в телефоне Android?

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

4b9b3361

Ответ 1

Внедрить 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";
        }
    }
}

Ответ 2

Лучше всего иметь дело с 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