scrollTo()、scrollBy()和Scroller
1.scrollTo()与scrollBy()使用
scrollTo()和scrollBy()是View的两个方法,可以进行View的移动。但是需要注意的是这两个方法移动的是View的内容,通俗的讲就是当View为ViewGroup时,移动的是此ViewGroup的子View;当View为单独的View时,移动的是内部内容。
例如:View为TextView时,移动的是内容文字。
- 由于他是移动的内容,隐藏想要启动此View,需要使用
((View)getParent()).scrollBy(offsetX,offsetY);
的而不能直接使用当前的View的scrollBy方法。 - scrollBy()和ScollTo()方法,是content的移动,而content是再屏幕之下的,隐藏这两个方法的移动其实可以看做是屏幕的移动。因此给这两个方法设置值的时候,需要要设置-dx,-dy.
例如:想让View想左移动dx,想下移动dy,需要使用((View)getParent()).scrollBy(-dx,-dy);
2. Scroller
Scoller可以实现平滑移动的效果,而不是瞬间移动的效果。
#一般情况下是用Scroller的步骤:
- 初始化Scroller
mScroller = new Scroller(context)
重写View的computeScroll()方法,实现模拟滑动
此方法会再View被绘制的是后即draw()方法内被调用。通常情况,computeScroll的代码可以利用如下模板来实现
:1
2
3
4
5
6
7
8public void computeScroll(){
super.computeScroll();
//判断Scroller是否执行完毕
if(mScroller.computeScrollOffset()){
((View) getParent()).scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
invalidate();//invalidate方法会重绘View,从而调用draw()方法,draw()放再调用computreScroll()方法
}
}startScroll开启模拟过程
1
2
3
4case MotionEvent.ACTION_UP:
mScroller.startScroll(getScrollX(),getScrollY(),-getScrollX(),-getScrollY());
invalidate();//调用draw---computeScroll
break;