首页 > 代码库 > Scroller 相关方法

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表示完成。

Scroller 相关方法