2016-04-01 3 views
0

я работаю над приложением, которое имеет вид списка, и на каждой ячейке этого списка я имею:OnClick, onLongClick и салфетки в то же время

  • OnClick, который берет меня на другой экран.
  • onLongClick, который отображает диалоговое окно.
  • проведите пальцем справа налево, чтобы показать две кнопки.

Проблема возникает, когда я пытаюсь провести, я также открыл диалоговое окно в то же время. (OnLongClick и Размах активируются одновременно)

Так вот мой код:

public class OnSwipeTouchListener implements OnTouchListener{ 

    private final GestureDetector gestureDetector; 

    public OnSwipeTouchListener (Context ctx){ 
     gestureDetector = new GestureDetector(ctx, new GestureListener()); 
    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     return gestureDetector.onTouchEvent(event); 
    } 

    private final class GestureListener extends SimpleOnGestureListener { 

     private static final int SWIPE_THRESHOLD = 100; 
     private static final int SWIPE_VELOCITY_THRESHOLD = 200; 

     @Override 
     public boolean onDown(MotionEvent e) { 
      return false; 
     } 

     @Override 
     public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
      boolean result = false; 
      try { 
       float diffY = e2.getY() - e1.getY(); 
       float diffX = e2.getX() - e1.getX(); 
       if (Math.abs(diffX) > Math.abs(diffY)) { 
        if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
         if (diffX > 0) { 
          onSwipeRight(); 
         } 
        } 
        Log.e("diffX", String.valueOf(diffX)); 
        Log.e("velocityX", String.valueOf(velocityX)); 
        result = true; 
       } 
       else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { 
        if (diffY > 0) { 
         onSwipeBottom(); 
        } else { 
         onSwipeTop(); 
        } 
       } 
       result = true; 

      } catch (Exception exception) { 
       exception.printStackTrace(); 
      } 
      return result; 
     } 
    } 

    public void onSwipeRight() { 
    } 

    public void onSwipeLeft() { 
    } 

    public void onSwipeTop() { 
    } 

    public void onSwipeBottom() { 
    } 
} 

Код для на Щелк, LongClick:

view.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 

      Intent intent = new Intent(MainActivity.this, secondActivity.class); 

        startActivity(intent); 
       } 
      }); 
      view.setOnLongClickListener(new View.OnLongClickListener() { 

       @Override 
       public boolean onLongClick(View v) { 
        Log.e("LongClick", "Long click"); 


        // code for the dialog 
       } 
      }); 

      view.setOnTouchListener(new OnSwipeTouchListener(MainActivity.this) { 
       public void onSwipeTop() { 
        Toast.makeText(MainActivity.this, "top", Toast.LENGTH_SHORT).show(); 
       } 

       public void onSwipeRight() { 
        Toast.makeText(MainActivity.this, "right", Toast.LENGTH_SHORT).show(); 
       } 

       public void onSwipeLeft() { 
        Toast.makeText(MainActivity.this, "left", Toast.LENGTH_SHORT).show(); 
       } 

       public void onSwipeBottom() { 
        Toast.makeText(MainActivity.this, "bottom", Toast.LENGTH_SHORT).show(); 
       } 

      }); 

     } 
+0

установить результат на 'false' при прокрутке влево/вправо и т. Д. – Blundell

+0

@blundell не работает. – Luji

ответ

-1

Here вы можете найти отличный решать учебник твоя проблема.

По существу, вы создадите прозрачный вид перед списком ListView, который потребляет события горизонтального движения и передает неглавные события движения обратно в ListView.

0

Почему вы установили OnLongClickListener отдельно?!? Переопределение onLongPress(MotionEvent e) метод GestureListener в классе OnSwipeTouchListener, он должен работать.

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