public class TestScroll extends SurfaceView implements Callback{
Scroller mScroller; private SurfaceHolder holder;
public TestScroll(Context context, AttributeSet attrs) {
super(context, attrs);
holder=this.getHolder();
holder.addCallback( this);
mScroller= new Scroller(context);

// TODO Auto-generated constructor stub
} @Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub

} @Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub

} @Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub

}
@Override
public boolean onTouchEvent(MotionEvent event) {
// TODO Auto-generated method stub
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
abortAnimation();
break; case MotionEvent.ACTION_MOVE:

break; case MotionEvent.ACTION_UP:
startAnimation(1200);
break; default:
break;
}
return true;
}
public void computeScroll() {
Log.i("computeScroll...", "|"+mScroller.isFinished());
super.computeScroll();
if (mScroller.computeScrollOffset()) {
float x = mScroller.getCurrX();
float y = mScroller.getCurrY(); }
} private void startAnimation(int delayMillis) {
int dx, dy;
// dx 水平方向滑动的距离,负值会使滚动向左滚动
// dy 垂直方向滑动的距离,负值会使滚动向上滚动
Log.i("computeScroll1...", "|"+mScroller.isFinished());
mScroller.startScroll((int)0 , (int)0, -50, -10,
delayMillis); Log.i("computeScroll2...", "|"+mScroller.isFinished());
} public void abortAnimation() {
if (!mScroller.isFinished()) {
mScroller.abortAnimation();
}
}
}