Velocity of fling
fling(터치화면에서 튕기기) 이라고 부르는 동작을 할 때 fling 의 속도에 따른 scroll 화면을 구하려고 한다면 fling 의 속도(velocity) 를 구할 수 있어야 한다. 속도를 구할 때 써야 하는 android api 는 아래와 같다.- addMovement(MotionEvent)
- computeCurrentVelocity(unit)
- getXVelocity() / getYVelocity()
computeCurrentVelocity(unit, maximumVelocity) 을 하면, 이 함수를 호출한 시점을 마지막 지점으로 해서 start~end 까지의 속도를 계산한다는 이야기이다. 그리고 이것을 parameter 로 넘기는 unit 의 단위로 반환해 준다. 예를 들면 unit 이 1,000 이면 1000 ms 동안 간 거리를 반환해 주는 것이다. 속도는 m/s 이니까 …(말이 복잡할 수도 있겠다. ㅜ.ㅜ)
그리고 maximumVelocity 는 속도의 한계치이다. 이 속도 이상이 나오지 않도록 해주는 것이다. 너무 빠른 스크롤은 유저한테나 기계한테나 안 좋다.^^
getXVelocity()/getYVelocity(), 그런데 computeCurrentVelocity(unit) 는 return 값이 없다. 즉, 계산만 해준다. 실제로 velocity를 얻어오는 함수는 getXVelocity()/getYVelocity() 이다. 이 함수로 computeCurrentVelocity() 를 호출했을 때 계산해서 저장된 값들을 return 해준다.
사용 예
source from : Cross Reference: /android/4.3/frameworks/base/packages/SystemUI/src/com/android/systemui/SwipeHelper.java
public boolean onTouchEvent(MotionEvent ev) { ... mVelocityTracker.addMovement(ev); final int action = ev.getAction(); switch (action) { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: float maxVelocity = MAX_DISMISS_VELOCITY * mDensityScale; mVelocityTracker.computeCurrentVelocity(1000 /* px/sec */, maxVelocity); mVelocityTracker.getXVelocity() ...
잘보았습니다~
답글삭제요걸 구현해보려 합니다~
4년이 흐른 현재에도 요런방식으로 플링스크롤 원리가 적용되겠죵?
fling 의 속도를 구하시겠다는 말씀이시죠? 가능할 듯 합니다. 아직까지 api 가 사라졌거나 (deprecated), 변경됐다는 말은 없는 듯 하네요.^^
삭제