【发布时间】:2019-09-27 12:15:34
【问题描述】:
我检测 onDown() 和 onFling() 手势用于两种不同的目的,两者都有效。
在 onDown() 中将播放声音,而在 onFling() 期间检测到滑动并采取与滑动相关的操作 - 在 onFling() 手势期间不应播放声音。
问题是当我执行滑动动作或 onFling() 被触发时,onDown() 声音被触发。
我当前的 onDown() 手势如下:
@Override
public boolean onDown(MotionEvent e) {
playSound();
return true;
}
我的 onFling() 看起来像:
@Override
public boolean onFling(MotionEvent downEvent, MotionEvent moveEvent, float velocityX, float velocityY) {
boolean result = false;
float diffY = moveEvent.getY() - downEvent.getY();
float diffX = moveEvent.getX() - downEvent.getX();
// which was greater? movement across Y or X
if( Math.abs(diffX) > Math.abs(diffY) ) {
// right or left swipe
if( Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
doSomethingCool();
result = true;
}
} else {
// up or down swipe
if( Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
doSomethingCool();
result = true;
}
}
return result;
}
我检查了 GestureDetector 类,看看 onDown() 是否可以有多个参数,例如 onDown(MotionEvent downEvent, MotionEvent moveEvent),但这是不可能的。
我尝试在 onDown() 中使用 MotionEvent 常量(ACTION_DOWN 和 ACTION_MOVE)来消除滑动/甩动作为一种可能的选择:
@Override
public boolean onDown(MotionEvent e) {
if(e.getAction() == e.ACTION_DOWN) {
playSound();
return true;
}
return false;
}
然而这并没有奏效。这是无法避免的事情吗?
我知道,要执行“甩动”动作,您必须先将手指放下……但我希望有一种方法可以仔细检查用户的手指是否向下移动(滑动/fling)。
提前致谢!
【问题讨论】:
标签: android gesture gesturedetector