最近做的一个软件,画面是自己绘制上去的,
只画屏幕(view port)所能呈现的部分,所以需要自己实现平滑滚动。
平滑滚动的关键在于:v=f(t)。
直觉上来说,找一个曲率递减的函数即可。
最简单的为:vt=v0-t*t,相当于一个变加速度运动。
下列代码适用于Android
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2,
float velocityX, final float velocityY) {
Log.i("ExamView", "onFling");
Log.i("ExamView", "onFling velocityY:" + String.valueOf(velocityY));
TimerTask task = new TimerTask() {
float t = 0;
float sig = -Math.signum(velocityY);
float v0 = Math.abs(velocityY)/50;
@Override
public void run() {
t += 0.1;
double vt = v0- t*t;
if (vt >= 0)
{
scrollByDeltaY((float) (sig*vt));
}
else
{
mScrollTimer.cancel();
return;
}
}
};
mScrollTimer = new Timer();
mScrollTimer.schedule(task, 0, 90);
return true;
}
来自: http://hi.baidu.com/frankpaine/blog/item/8a048882cafd4e88f703a64c.html