/** * Handles Touch event * * @param event the motion event * @return */ public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: lastTouchedPosition = getMotionEventPosition(event); scroller.forceFinished(true); clearMessages(); listener.onTouch(); break; case MotionEvent.ACTION_UP: if (scroller.isFinished()) listener.onTouchUp(); break; case MotionEvent.ACTION_MOVE: // perform scrolling int distance = (int) (getMotionEventPosition(event) - lastTouchedPosition); if (distance != 0) { startScrolling(); listener.onScroll(distance); lastTouchedPosition = getMotionEventPosition(event); } break; } if (!gestureDetector.onTouchEvent(event) && event.getAction() == MotionEvent.ACTION_UP) { justify(); } return true; }
public void handleMessage(Message msg) { scroller.computeScrollOffset(); int currPosition = getCurrentScrollerPosition(); int delta = lastScrollPosition - currPosition; lastScrollPosition = currPosition; if (delta != 0) { listener.onScroll(delta); } // scrolling is not finished when it comes to final Y // so, finish it manually if (Math.abs(currPosition - getFinalScrollerPosition()) < MIN_DELTA_FOR_SCROLLING) { // currPosition = getFinalScrollerPosition(); scroller.forceFinished(true); } if (!scroller.isFinished()) { animationHandler.sendEmptyMessage(msg.what); } else if (msg.what == MESSAGE_SCROLL) { justify(); } else { finishScrolling(); } }