使用Scroller类实现滑动效果的原因:
使用 scrollTo()
和 scrollBy()
方法滑动View过于突兀,是瞬间完成的,使用Scroller类有一定的动画效果。
使用Scroller类的三个步骤:
- 初始化Scroller
Scroller mScroller;
mScroller = new Scroller(context);
- 重写computeScroll()方法,实现模拟滑动
@Override
public void computeScroll(){
super.computeScroll();
//判断Scroller是否执行完毕
if(mScroller.computeScrollOffset()){
((View)getParent()).scrollTo(
mScroller.getCurrX(),
mScroller.getCurrY());
//通过重绘来不断调用computeScroll
invalidate();
}
}
注意:computeScroll()方法不会自动调用,只能通过invalidate()->draw()->computeScroll()来间接调用
- startScroll()开启模拟过程
通常使用 getScrollX()
和 getScrollY()
方法来获取父视图中content所滑动到的点的坐标,要注意值的正负。
onTouchEvent()
中 MotionEvent.ACTION_UP
监听:
case MotionEvent.ACTION_UP:
//手指离开时,执行滑动过程
View viewGroup = (View)getParent();
mScroller.startScroll(
viewGroup.getScrollX(),
viewGroup.getScrollY(),
-viewGroup.getScrollX(),
-viewGroup.getScrollY());
invalidate();
break;