package rabbitescape.ui.android; import android.view.MotionEvent; public class Scrolling { public float curX = 0; public float curY = 0; public float velX = 0; public float velY = 0; private final GameSurfaceView view; private final float squaredTouchSlop; private Flinger flinger = null; private int movedDistSquared = 0; public Scrolling( GameSurfaceView view, float touchSlop ) { this.view = view; this.squaredTouchSlop = touchSlop * touchSlop; } public boolean onTouchEvent( MotionEvent event ) { if ( event.getAction() == MotionEvent.ACTION_DOWN ) { cancelFlinger(); curX = event.getX(); curY = event.getY(); movedDistSquared = 0; } else if ( event.getAction() == MotionEvent.ACTION_MOVE ) { cancelFlinger(); velX = curX - event.getX(); velY = curY - event.getY(); movedDistSquared += ( velX * velX ) + ( velY * velY ); curX = event.getX(); curY = event.getY(); doScroll(); } else if( event.getAction() == MotionEvent.ACTION_UP ) { cancelFlinger(); curX = event.getX(); curY = event.getY(); if ( movedDistSquared < squaredTouchSlop ) { view.performClick(); } else { flinger = new Flinger( this ); flinger.start(); } } return true; } private void cancelFlinger() { if ( flinger != null ) { flinger.pleaseStop(); flinger = null; } } public void doScroll() { if ( view.game != null ) { view.game.gameLaunch.scrollBy( velX, velY ); } } }