android.view.GestureDetector.OnGestureListener的onFling()和onScroll()事件有什么区别? 链接文本
4 回答
onScroll() 发生在用户将手指放在屏幕上并在屏幕上滑动手指而不抬起手指之后。如果用户滚动然后抬起手指,就会发生 onFling()。仅当运动足够快时才会触发投掷。
实际上,onFling 与运动发生的速度无关。是用户,通过velocityX 和velocityY 参数确定速度(或距离,通过MotionEvent 参数)是否足以满足他们的目的。
onScroll 会在用户移动手指时不断调用,而 onFling 仅在用户抬起手指后才会调用。
framework/base/core/java/android/view/GestureDetector.java
您可以在方法中看到 , 的代码onTouchEvent()
。在and oronFling()
的情况下被调用。在 的情况下被调用。MotionEvent.ACTION_UP
velocityY > mMinimumFlingVelocity
velocityX > mMinimumFlingVelocity
onScroll()
MotionEvent.ACTION_MOVE
在 onFling() 发生后,您可以区分两者。首先,在 onDown() 中将图像的当前坐标存储为类变量。onScroll() 将按预期工作,但如果 onFling() 确定这是一个 fling 事件,则只需恢复存储在 onDown() 中的原始坐标。我发现这非常有效。
@Override
public boolean onDown(MotionEvent e) {
// remember current coordinates in case this turns out to be a fling
mdX = imageView.dX;
mdY = imageView.dY;
return false;
}