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