2010-06-21 4 views

답변

10

onScroll()은 손가락을 화면에 대고 손가락을 들어 올리지 않고 손가락을 화면 위로 밀면 발생합니다. onFling()은 사용자가 스크롤 한 다음 손가락을 들으면 발생합니다. 모션이 충분히 빠르면 플링이 트리거됩니다.

1

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; 

}

3

사실 onFling는 움직임이 발생했습니다하는 속도와는 아무 상관이있다. MotionX 매개 변수를 통해 속도 (또는 거리)가 목적에 부합하는지 결정하는 velocityX 및 velocityY 매개 변수를 통해 사용자입니다.

onScroll은 사용자가 손가락을 움직일 때 계속 호출되며, onFling은 사용자가 손가락을 들었을 때만 호출됩니다.

2

framework/base/core/java/android/view/GestureDetector.java 코드는 onTouchEvent() 방법으로 볼 수 있습니다. MotionEvent.ACTION_UPvelocityY > mMinimumFlingVelocity 또는 velocityX > mMinimumFlingVelocity의 경우 onFling()이 호출됩니다. MotionEvent.ACTION_MOVE의 경우 onScroll()이 호출됩니다.

관련 문제