2014-12-30 1 views
1

Делаю приложение для управления SwipeEvent, но работает только с левыми и правыми слева. Валидации вверх и вниз не работают. Извините за сообщения в Toast на португальский. В основном:SwipeEvent на Android-приложении

(x1 <x2) - left to right/(x1> x2) - right to left/(y1 <y2) - up to down 
(y1> y2) - down to up 

I Changed "GetX() и GetY()" в "getRawX() и getRawY()". Результат остается тем же. Например, если я делаю движение салфетки слева направить отображаются тосты «Размах слева направо (КИ) и Swipe сверху вниз (не КИ).

Может кто-то пожалуйста, помогите мне?

Мой код:

public class MainActivity extends ActionBarActivity { 

float x1,x2; 
float y1,y2; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

//onTouchEvent() é o metodo chamado quando o usuário realiza um evento de toque na tela 
//Método que trata evento de toque como Swipe 

public boolean onTouchEvent(MotionEvent touchevent) 
{ 
    switch (touchevent.getAction()) 
    { 
     //Ao usuário tocar na tela pela primeira vez, obtem as coordenadas x e y 
     case MotionEvent.ACTION_DOWN: { 
      x1 = touchevent.getX(); 
      y1 = touchevent.getY(); 
      break; 
     } 

     case MotionEvent.ACTION_UP: { 
      x2 = touchevent.getX(); 
      y2 = touchevent.getY(); 

      //if para validar swipe da esquerda para direita 
      if(x1<x2) 
      { 
       Toast.makeText(this, "Swipe Esquerda para Direita", Toast.LENGTH_SHORT).show(); 
      } 

      //if para validar swipe da direita para esquerda 
      if(x1>x2) 
      { 
       Toast.makeText(this, "Swipe Direita para Esquerda", Toast.LENGTH_SHORT).show(); 
      } 

      //if para validar swipe de cima para baixo 
      if(y1<y2) 
      { 
       Toast.makeText(this, "Swipe Cima para Baixo", Toast.LENGTH_SHORT).show(); 
      } 

      //if para validar swipe de baixo para cima 
      if(y1>y2) 
      { 
       Toast.makeText(this, "Swipe Baixo para Cima", Toast.LENGTH_SHORT).show(); 
      } 
      break; 
     } 
    } 
     return false; 

} 
} 
+0

Не нужно ли возвращать 'истинный' в методе выше? – YuDroid

ответ

0

событие движение может вернуть координаты относительно предыдущего события

чтобы избежать этого, используйте touchevent.getRawX() и touchevent.getRawY() вместо.и getY()

+0

Здравствуйте, спасибо за помощь. Изменено на «getX() и getY()» на «getRawX() и getRawY()». Результат остается тем же. Например, если я делаю движение движения слева, чтобы направить отображаемый Toast, «Проведите по экрану влево-вправо (OK) и проведите по экрану сверху вниз (не в порядке)». @ Грег Эннис –

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