您的位置:首页 > 移动开发 > Android开发

Android的Scroller用法

2015-11-13 15:14 351 查看
1、Android的Scroller类是一个为View实现平滑的(Help)帮助类。

      Scroller类提供了一个computeScrollerOffset()方法来判断是否完成了整个滑动,同时也提供了getCurrx()、getCurrY()方法来获的当前的滑动坐标,在上面的代码中,唯一

需要注意的是invalidate()方法,因为只能在computeScroll()方法中获取模拟过程中的ScrollX和ScrollY坐标。但computeScroll()方法是不会自动调用的,只能通过invalidate()

→draw()→computeScrooll()来间接调用computeScroll()方法,所以需要在模板代码中调用invalidate()方法,实现循环获取scrollX和scrollY的目的。而当模拟过程结束后,scroller.computeScrollOffset()方法会返回false,从而中断循环,完成怎个平滑的过程。

      实现平滑移动要重写两个方法:
public void startScroll(int startX, int startY,int dx, int dy, int duration);
public void startScroll(int startX, int startY, int dx , int dy);
 这是实现一个自定义View拖动到位置,在回到起始点。

public class ScrollerView extends View {

private Scroller scroller;

public ScrollerView(Context context) {
super(context);
initView(context);
}

public ScrollerView(Context context, AttributeSet attrs) {
super(context, attrs);
initView(context);
}

public ScrollerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initView(context);
}

public void initView(Context context) {

setBackgroundColor(Color.GREEN);
scroller = new Scroller(context);

}

@Override
public void computeScroll() {
super.computeScroll();

//判断Scroller是否执行完没。
if (scroller.computeScrollOffset()) {
//记住Scroller的滑动当前坐标。
((View) getParent()).scrollTo(scroller.getCurrX(), scroller.getCurrY());
//不停的绘制
invalidate();
}
}

int lastX;
int lastY;

@Override
public boolean onTouchEvent(MotionEvent event) {

//        int x = (int) event.getX();
//        int y = (int) event.getY();

switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = (int) event.getX();
lastY = (int) event.getY();
break;
case MotionEvent.ACTION_MOVE:

int offsetX = (int) event.getX() - lastX;
int offsetY = (int) event.getY() - lastY;

((View) getParent()).scrollBy(-offsetX, -offsetY);
break;
case MotionEvent.ACTION_UP:
//手指离开时,执行滑动过程
View viewGroup = (View) getParent();

scroller.startScroll(viewGroup.getScrollX(), viewGroup.getScrollY(), -viewGroup.getScrollX(),-viewGroup.getScrollY(),5000);

invalidate();
break;
}
return true;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android