2015-05-06 4 views
0

У меня есть этот код:OnTouchEvent каждый красть другое действие

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      x1 = event.getX(); 
      break; 
     case MotionEvent.ACTION_UP: 
      x2 = event.getX(); 
      float deltaX = x2 - x1; 

      if (Math.abs(deltaX) > MIN_DISTANCE) { 
       if (x2 > x1) { 
       //from right to left 

      } else { 

        // from left to right 
       } 
      } 
      break; 
    } 
    return super.onTouchEvent(event); 
} 

Я хочу переделать этот код так, что когда я в первый раз красть это сделать какое-то действие, когда я второй красть это сделать еще одно действие, и когда я третий ударь это сделать еще одно действие ...

Может мне помочь? Благодарим за каждый ответ

+0

Вы имеете в виду, что каждый салфетент происходит отдельно? Как в пальце касается телефона, дергается, поднимается, затем начинается вторая салфетка? Или вы имеете в виду, что второй и третий щелчки начинаются, пока первый все еще происходит, т. Е. Мультитач? – Seth

+0

Да каждый салфетки отдельно – tommi878

ответ

0

Вы можете использовать переменную класса, чтобы сохранить, сколько раз произошло салфетки, и действовать соответствующим образом.

private int swipeCounter = 0; 

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      x1 = event.getX(); 
      break; 
     case MotionEvent.ACTION_UP: 
      x2 = event.getX(); 
      float deltaX = x2 - x1; 

      boolean left = Math.abs(deltaX) > MIN_DISTANCE; 

      swipeCounter++; 

      switch(swipeCounter) { 
       case 1: 
        ... 
        break; 
       case 2: 
        ... 
        break; 
      } 
      break; 
    } 
    return super.onTouchEvent(event); 
} 

Я оставил свою другую логику в одиночку, но есть несколько вещей, которые я бы рекомендовал изменить. Во-первых, если расстояние между проходами не превышает MIN_DISTANCE, оно всегда будет регистрироваться как правый салфетка. Вы можете изменить это. Кроме того, вы можете сделать эту проверку в событии ACTION_MOVE, чтобы ваши действия всегда возникали после того, как пользователь набрал определенное расстояние, а не когда они поднимают палец. (Итак, рассчитайте дельта во время каждого хода, если оно больше MIN_DISTANCE, определите, было ли оно левым или правым и приращение swipeCounter.)

+0

спасибо очень много :)))) – tommi878

+0

Мне нужно проведите пальцем слева направо и наоборот? вы можете добавить этот код? – tommi878

0

Прежде всего вам нужно проверить, что вы имеете дело с правильным салфеткой, а это значит, что вы надеваете 'Проверяйте индексы прессов, вы можете использовать: {motionEvent.getX (pointerIndex)}, во-вторых, вам нужно проверить, прокручивается ли пользователь в одном направлении, а затем прокручивается в другое направление, если это вообще что-то значит , в-третьих, вы не проверяете, что произойдет, если оно отменено, и чтобы завершить этот комментарий, действительно ли хотите передать событие касания родительскому?

Что касается решения, используйте getActionIndex, сохраните x в arraylist или hashmap, чтобы у вас был какой-то простой доступ к первому x в соответствии с индексом действия, таким образом вы можете обрабатывать множество прокруток как экран может поддерживать, и он будет очень надежным, не забудьте проверить action_canceled, поэтому, если он отменяет удаление x из массива, я бы использовал hashmap, это может быть дорого, но будет работать быстрее всего.

Смежные вопросы