Mah*_*rad 5 android scroll android-custom-view touch-event android-framelayout
我有一个扩展FrameLayout的视图,并且需要通知其滚动事件。此视图具有实现GestureDetector的类的实例,该类由重写的onInterceptTouchEvent方法调用。
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; }
}
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,当我尝试滚动时,onDown和onLongPress方法可能会被调用,但实际的onScroll方法却从未被调用。
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
boolean result = super.onInterceptTouchEvent(event);
if (gestureDetector.onTouchEvent(event)) {
return result;
} else {
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
onInterceptTouchEvent一旦返回,就不会再次调用运动序列true。事件随后被onTouchEvent直接发送(因为它们现在被子级拦截)。
您需要在这里进行两处更改:
OnGestureListener.onDown()应该返回,true以便检测器可以处理更复杂的手势,例如滚动onInterceptTouchEvent应始终返回false以保持事件流流向此方法| 归档时间: |
|
| 查看次数: |
2192 次 |
| 最近记录: |