版本1.0和版本2.0的风车有个不尽人意的效果:当手指抬起的时候风车就会停止转动,现在版本3要做的就是让手指抬起的时候让风车继续转动一段时间,思路如下:
1)手指抬起的时候继续让风车转动5秒
2)需要监听MotionEvent.ACTION_UP事件并记录手指抬起的时间upTime
3)捕获MotionEvent.ACTION_UP事件并重绘五秒钟
根据上面的说明RotationView的代码做了如下的改变(在版本2的基础上主要修改了onTouchEvent事件:
/**手指抬起的时间**/
private long upTime = 0;
/**手指抬起的时候风车持续转动的时间**/
private final long stopTimeDuration = 5000;
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_MOVE:// 随着手指的move而不断进行重绘
//该方法在UI线程自身中使用
postInvalidate();
break;
case MotionEvent.ACTION_UP:// 随着手指的move而不断进行重绘
upTime = System.currentTimeMillis();
post(new Runnable() {
@Override
public void run() {
long duration = System.currentTimeMillis()-upTime;
if(duration ==stopTimeDuration ) {
return;
}else if(duration<stopTimeDuration) {
post(this);
}
//在非UI线程中使用。
invalidate();
}
});
break;
}
return true;
}
当然这个版本的风车还是有问题:风车转动的速度是一致的,不会随着手指移动的快慢而变化,这个将在下一个版本解决,详见自定义View之大风车系列(三)