onFling手势不生效求助:Android滑动操作无响应
解决onFling手势无响应的问题
我帮你排查了代码里的问题,主要有两个关键点导致onFling没触发,调整后就能正常工作了:
问题1:onTouchEvent的返回值错误
你当前的onTouchEvent方法调用手势检测器后直接返回了父类的处理结果,这会让系统认为Activity没有处理触摸事件,导致手势检测器的后续逻辑被中断。
修正后的onTouchEvent:
@Override public boolean onTouchEvent(MotionEvent event) { // 先让手势检测器处理事件,获取处理结果 boolean gestureHandled = gestureObject.onTouchEvent(event); // 如果手势没处理,再交给父类处理(可选,根据你的需求调整) return gestureHandled || super.onTouchEvent(event); }
问题2:未重写onDown方法导致手势流程中断
GestureDetector.SimpleOnGestureListener的onDown方法默认返回false,而onFling的触发必须依赖onDown返回true——因为手势检测的第一步是确认down事件被处理,后续的滑动、fling等事件才会被触发。
修正后的LearnGesture类:
class LearnGesture extends GestureDetector.SimpleOnGestureListener { // 重写onDown并返回true,开启后续手势检测流程 @Override public boolean onDown(MotionEvent e) { return true; } @Override public boolean onFling(MotionEvent event1, MotionEvent event2, float velocityX, float velocityY) { Log.d("OkHttp","Goody"); // 任意方向滑动都执行目标方法,无需判断左右 displayInfoDialogView(); return true; } }
另外,你原来的代码里判断左右滑动都执行同一个方法,我直接简化掉了if-else逻辑,这样代码更简洁,效果完全一致。
内容的提问来源于stack exchange,提问作者Egor Cherkashin
相关产品推荐
相关产品推荐

