Сенсорная логика жестов ... как определить направление движения в 2d? - PullRequest
0 голосов
/ 14 мая 2011

Как я могу определить направление жеста?Вариант использования показан в ссылке на изображение.Какова правильная логика для определения, в каком направлении человек пытается переместить мяч по круговой траектории?Я назвал метод направления в жесте движения ... Может кто-нибудь помочь мне точно настроить это ...?

http://www.shrenikvikam.com/wp-content/uploads/2011/04/214e422a43E11S3.png-150x134.png

     private String getDirection(float firstTouchX, float finalTouchX){
        if((firstTouchX - finalTouchX)>0)
            return "Left";
        else
            return "Right";
    }


    @Override
    public boolean onTouchEvent(MotionEvent event) {
        int action = event.getAction();

        switch (action) {
            // MotionEvent class constant signifying a finger-down event
            case MotionEvent.ACTION_DOWN: {
                Log.d("ACTION DOWN","Value ->");
                final float x = event.getX();
                final float y = event.getY();
                initialTouchX = x;
                initialTouchY = y;
                break;

            }
            // MotionEvent class constant signifying a finger-drag event
            case MotionEvent.ACTION_MOVE: {
                final float x = event.getX();
                final float y = event.getY();
                final String direction = getDirection(initialTouchX,x);
                Log.d("ACTION MOVE","diff in initial and cur value of x  ->" + direction + (initialTouchX - x) + initialTouchX + "y->" + initialTouchY);

                break;

            }
            // MotionEvent class constant signifying a finger-up event
            case MotionEvent.ACTION_UP: {
                Log.d("ACTION UP","Value ->");

                break;
            }
        }
        return true;
    }

Ответы [ 4 ]

2 голосов
/ 17 мая 2011

Кажется, что наклон линии, образованной двумя точками касания, должен быть равен тангенсу круга в этой точке.Эта ссылка имеет большую часть математики для поиска такого решения

Я с большим успехом использовал разницу между углами относительно центральной точки круга.Это может быть и путь.

1 голос
/ 15 мая 2011

Если вы пытаетесь определить, каким образом перемещать шар по кругу, для getDirection не имеет смысла возвращать "Left" и "Right", он должен работать с "Clockwise" и "Counterclockwise". Рассмотрим, например, когда мяч находится на отметке 20 на вашем изображении: в этой точке каждая точка на окружности находится на "Right" от того места, где вы сейчас находитесь ...

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

0 голосов
/ 02 октября 2017

Я использую этот код для поворота вида.Это работает очень хорошо.Посмотрите на это;

switch (event.getAction()) {

            case MotionEvent.ACTION_DOWN:
                firstX = event.getX();
                firstY = event.getY();

                break;
            case MotionEvent.ACTION_MOVE:
                int dx =(int) (event.getX() - firstX);
                int dy =(int) (event.getY() - firstY);

                Log.d("Distance Rotate Touch",Integer.toString((int) (firstX-dx)));

                if (signView.getRotation()<180){
                    if (firstX - dx > 15 && firstY - dy > 15 ){
                        View.setRotation(signView.getRotation()-5);
                    }else if(firstX - dx < -15 && firstY - dy < 15  ){
                        View.setRotation(signView.getRotation()+5);
                    }
                }else {
                    if (firstX - dx > 10 && firstY - dy < -10 ){
                        View.setRotation(signView.getRotation()+5);
                    }else if(firstX-dx < -10 && firstY - dy < -15 ){
                        View.setRotation(signView.getRotation()-5);
                    }
                }
                break;

            default: return true;
        }
0 голосов
/ 08 ноября 2014
                prevTouchX = event.getHistoricalX(event.getHistorySize()-1);
                currentTouchX = event.getX();
                if(currentTouchX<prevTouchX){
                    Log.d("LEFT",event.getX()+" and "+event.getY());
                }
                if(currentTouchX>prevTouchX){
                    Log.d("RIGHT",event.getX()+" and "+event.getY());
                }

Аналогично для UP / DOWN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...