4
我有一個擴展FrameLayout的視圖,需要通知其上的滾動事件。 該視圖有一個實現GestureDetector的類的實例,該實例由被覆蓋的onInterceptTouchEvent方法調用。Android手勢檢測器無法使用FrameLayout檢測onScroll事件
private class HorizontalScrollListener implements OnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
...
return false;
}
@Override
public boolean onDown(MotionEvent e) {
...
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
return false;
}
@Override
public void onLongPress(MotionEvent e) {
...
System.out.println();
}
@Override
public void onShowPress(MotionEvent e) {}
@Override
public boolean onSingleTapUp(MotionEvent e) { return false; }
}
唯一的問題是,onDown和onLongPress方法可以被調用惠蔭我嘗試滾動,但實際onScroll方法永遠不會被調用。
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean result = super.onInterceptTouchEvent(event);
if (gestureDetector.onTouchEvent(event)) {
return result;
} else {
return false;
}
}
您是否嘗試從onDown()返回true? – devconsole 2012-02-10 15:53:59
是的,但它永遠不會到達onScroll(..) – Mahorad 2012-02-10 16:22:06
對不起,我不能給你一個答案,但根據我的測試onInterceptTouchEvent並沒有收到所有的觸摸事件,但只有最初的下降事件。因此,手勢檢測器無法完成其工作。 (嘗試添加調試輸出到方法。)根據官方[文檔](http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent%28android.view.MotionEvent%29)一個有返回假以接收所有以下事件,但這似乎不是真的。 – devconsole 2012-02-11 00:25:05