2015-06-03 25 views
1

所以我有一個由GridView佈局,我想添加一個OnTouchListener當用戶刷卡向左或向右處理該事件,所以我做了一個實現OnTouchListener一類,它被稱爲OnSwipeTouchListener,它的工作確實不錯,但問題是我的gridView,滾動工作正常,但是當我點擊一個項目時,它會自動選擇行中的第一項。任何想法如何解決這個或另一種方式來檢測左或右滑動,並使gridview工作正常,謝謝。如何通過gridView添加OnTouchListener?

P.S:當我刪除onTouchListener時,gridView正常工作。

的OnSwipeTouchListner:

public class OnSwipeTouchListener implements OnTouchListener { 

private final GestureDetector gestureDetector; 

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

public void onSwipeLeft() { 
} 

public void onSwipeRight() { 
} 

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

private final class GestureListener extends SimpleOnGestureListener { 

    private static final int SWIPE_DISTANCE_THRESHOLD = 100; 
    private static final int SWIPE_VELOCITY_THRESHOLD = 100; 

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

    @Override 
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { 
     float distanceX = e2.getX() - e1.getX(); 
     float distanceY = e2.getY() - e1.getY(); 
     if (Math.abs(distanceX) > Math.abs(distanceY) && Math.abs(distanceX) > SWIPE_DISTANCE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { 
      if (distanceX > 0) 
       onSwipeRight(); 
      else 
       onSwipeLeft(); 
      return true; 
     } 
     return false; 
    } 
} 
} 

調用它的主要活動:

gridView.setOnTouchListener(new OnSwipeTouchListener(this){ 
     public void onSwipeRight() { 
     } 
     public void onSwipeLeft() { 
      } 
    }); 
+0

你可以發佈您的代碼 – 3xplore

+0

@ r7v我編輯我的問題 –

回答

0

嘗試使用setOnItemClickListener

gridView.setOnItemClickListener(

new OnItemClickListener(){ 
    public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) { 

    } 
}); 
);