实现功能:拖动view之后返回到原位置(平滑返回而非瞬时移动)
分析:用到Scroller类的computeScroll()方法,它是Scroller类的核心方法,这里牵涉到它的循环调用;
1、重写computeScroll():
super.computeScroll();
if(mScroller.computeScrollOffset())
{
((View)getParent).scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
invalidate();
}
最后一定要加上invalidate()来实现循环调用的目的,因为它的调用过程是这样的:
invalidate() -> draw() -> computeScroll() 懂我意思吧
2、判断触摸事件:
View viewGroup = (View)getParent;
Up: mScroller.startScroll(viewGroup.getScrollX(), viewGroup.getScrollY, -viewGroup.getScrollX(), -viewGroup.getScrollY(), 300);
invalidate(); //循环computeScroll()的起点
break;
设置的startScroll()的偏移量为其相反数,就平滑的滑回去了。
这里设置了duration参数为300, 可以忽略的, 测试发现好平滑呀hhh