Scroller 相关方法
一、Scroller
1、获取Scroller 实例:
这个比较简单,找到栈顶的activity(也就是当前手机上能操作的界面)
Scroller scroller = new Scroller(getContext());
2、scrollTo(int x,int y)/scrollerBy(int x,int y):
理解这两个方法,主要理解参数,x>0 往左移动 绝对值x 个单位,x<0往右移动 绝对值x个单位
y>0 往上移动 绝对值y 个单位,y<0往下移动 绝对值y个单位
scrollTo--> x,y 相对于手机屏幕左上角(0,0)来说,移动到屏幕上x,y位置
scrollBy-->x,y 相对于手机屏幕左上角(0,0)来说,移动到屏幕上curX+x,curY+y位置,
curX+x,curY+y是什么东西?curX:view当前横坐标,curY当前纵坐标,
所以scrollBy移动的是:当前坐标+传进来的参数 后得到的两个点
比如 现在有个view 左上角坐标是(5,10)scrollTo(1,1) 后 ,view直接移动到(1,1)这个位置,也就是向左移 动4个单位,向上移动9个单位,
而 scrollBY(1,1)后 view移动到(5+1,10+1)这个位置,也就是向左移动一个单位,向上移动一个单位
3、getScrollX/getScrollY
getScrollX:得到的是view里面内容的X坐标,比如说,view 里面的内容 向左滑动100单位 getScrollX()就得到 100 而不是当前坐标;getScrollY 同理;
4、startScroll(x,y,dx,dy)/startScroll(x,y,dx,dy,duration)
滑动,手机上表示为一个滑动过程,x起始x坐标,y起始y坐标,dx x轴上滑动的距离,dy y轴上滑动的距离,duration 完成滑动这段距离所需要的时间。
说到这里,就必须有invalidate(),它的作用是刷新,将移动后的图像重新绘制出来,还有一个和invalidate()相似的方法postInvalidate() 区别是invalidate()不能在子线程里面执行,必须在主线程里面执行,通过handler发送消息给主Activity,在它里面执行刷新,postInvalidate()没有这个限制
5 使用 startScroll 要重写
@Override
public void computeScroll(){} 它会在绘制(draw())的时候被调用
if(scroller.computeScrollOffset()){
scrollTo(scroller.getCurrX(), 0);
postInvalidate();
}
scroller.computeScrollOffset() 来判断滑动是否完成 返回值 true/false true 表示没有完成,
false表示完成。