2011-03-10 24 views
2

我想知道用戶是否滾動向上或向下滾動。 我已經開始重寫OnGestureListener.onScroll()方法並將GestureDetector設置爲ListViewAndroid ListView:覆蓋導致滾動不執行

public class ContactList extends ListView { 

    GestureDetector gestureDetector; 

    public ContactList(Context context) { 
     super(context); 
     initView(); 
    } 

    public ContactList(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
     initView(); 
    } 

    public ContactList(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initView(); 
    } 

    private void initView() { 
     gestureDetector = new GestureDetector(new SimpleOnGestureListener() { 
      public boolean onScroll(MotionEvent firstEvent, MotionEvent secondEvent, float distanceX, float distanceY) { 
       Log.d("tag", "onScroll "+firstEvent.getAction()); 
       Log.d("tag", "onScroll "+secondEvent.getAction()); 
       return true; 

      }; 
     }); 

    } 

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

調試,我注意到它來自的onTouchEvent(),而不是通過從onScroll()和滾動不被ListView了perfomed。

我在做什麼錯?

謝謝

回答

4

您是否嘗試過在你的onTouchEvent方法調用super.onTouchEvent(event)

編輯 - 我想你還想在onScroll方法中返回false

然後你onTouchEvent方法應該是:

@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (gestureDetector.onTouchEvent(event)) { 
     return true; 
    } 
    return super.onTouchEvent(event); 
} 
+0

好極了!在'onScroll()'中返回'false'是聲明事件沒有消耗,所以'onTouchEvent()'可以將事件轉發給超類。有用。非常感謝你! :) – 2011-03-11 08:45:37