2016-07-22 10 views
0

ich eine CustomListView erstellt haben, enthält es überschreiben Methode dispatchTouchEvent mit return false wie untenandroid Custom unterscheiden Ereignisse mit dispatchTouchEvent mit Gesture immer false zurück

ich zwischen Klick, langer Klick und doppeltes Antippen unterscheiden müssen.?

@Override 
    public boolean dispatchTouchEvent(MotionEvent ev) { 
     if (ev.getAction() == MotionEvent.ACTION_DOWN || ev.getAction() == MotionEvent.ACTION_POINTER_DOWN) { 
      getParent().requestDisallowInterceptTouchEvent(true); 
     } 

     if (ev.getAction() == MotionEvent.ACTION_UP || ev.getAction() == MotionEvent.ACTION_POINTER_UP) { 
      getParent().requestDisallowInterceptTouchEvent(false); 
     } 
     return false; 
    } 

@Override 
    public boolean onTouchEvent(MotionEvent event) { 
     gestureDetector.onTouchEvent(event); 
     return false; 
    } 

    final GestureDetector gestureDetector = (new GestureDetector(new GestureDetector.SimpleOnGestureListener() { 


     @Override 
     public boolean onSingleTapConfirmed(MotionEvent e) { 
      getParent().requestDisallowInterceptTouchEvent(true); 
      return false; 
     } 

     @Override 
     public void onLongPress(MotionEvent e) { 
      super.onLongPress(e); 
      Log.e("test", "Long press detected"); 
     } 


     @Override 
     public boolean onDoubleTap(MotionEvent e) { 
      Log.e("test", "Double Tab detected"); 
      return super.onDoubleTap(e); 
     } 
    })); 

liefern suggestion.

Antwort

0

Deklarieren Sie Ihren GestureDetector, bevor Sie den onTouchListener auf eine Ansicht einstellen. Sie müssen Ihren GestenListener auch im onTouchEvent wie folgt bereitstellen:

final GestureDetector.SimpleOnGestureListener simpleOnGestureListener = new GestureDetector.SimpleOnGestureListener() { 
     @Override 
     public boolean onSingleTapConfirmed(MotionEvent e) { 
      ... 
     } //etc 
    } 

viewHolder.itemView.setOnTouchListener(new View.OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      return gestureDetector.onTouchEvent(event, simpleOnGestureListener); 
     } 
    });