当前位置: 代码迷 >> Android >> Android Scroller简略用法
  详细解决方案

Android Scroller简略用法

热度:12   发布时间:2016-05-01 10:13:26.0
Android Scroller简单用法

Android里Scroller类是为了实现View平滑滚动的一个Helper类。通常在自定义的View时使用,在View中定义一个私有成员mScroller = new Scroller(context)。设置mScroller滚动的位置时,并不会导致View的滚动,通常是用mScroller记录/计算View滚动的位置,再重写View的computeScroll(),完成实际的滚动。?

????? 相关API介绍如下
?

Java代码??收藏代码
  1. mScroller.getCurrX()?//获取mScroller当前水平滚动的位置??
  2. mScroller.getCurrY()?//获取mScroller当前竖直滚动的位置??
  3. mScroller.getFinalX()?//获取mScroller最终停止的水平位置??
  4. mScroller.getFinalY()?//获取mScroller最终停止的竖直位置??
  5. mScroller.setFinalX(int?newX)?//设置mScroller最终停留的水平位置,没有动画效果,直接跳到目标位置??
  6. mScroller.setFinalY(int?newY)?//设置mScroller最终停留的竖直位置,没有动画效果,直接跳到目标位置??
  7. ??
  8. //滚动,startX,?startY为开始滚动的位置,dx,dy为滚动的偏移量,?duration为完成滚动的时间??
  9. mScroller.startScroll(int?startX,?int?startY,?int?dx,?int?dy)?//使用默认完成时间250ms??
  10. mScroller.startScroll(int?startX,?int?startY,?int?dx,?int?dy,?int?duration)??
  11. ??
  12. mScroller.computeScrollOffset()?//返回值为boolean,true说明滚动尚未完成,false说明滚动已经完成。这是一个很重要的方法,通常放在View.computeScroll()中,用来判断是否滚动是否结束。??




????? 举例说明,自定义一个CustomView,使用Scroller实现滚动:?

Java代码??收藏代码
  1. import?android.content.Context;??
  2. import?android.util.AttributeSet;??
  3. import?android.util.Log;??
  4. import?android.view.View;??
  5. import?android.widget.LinearLayout;??
  6. import?android.widget.Scroller;??
  7. ??
  8. public?class?CustomView?extends?LinearLayout?{??
  9. ??
  10. ????private?static?final?String?TAG?=?"Scroller";??
  11. ??
  12. ????private?Scroller?mScroller;??
  13. ??
  14. ????public?CustomView(Context?context,?AttributeSet?attrs)?{??
  15. ????????super(context,?attrs);??
  16. ????????mScroller?=?new?Scroller(context);??
  17. ????}??
  18. ??
  19. ????//调用此方法滚动到目标位置??
  20. ????public?void?smoothScrollTo(int?fx,?int?fy)?{??
  21. ????????int?dx?=?fx?-?mScroller.getFinalX();??
  22. ????????int?dy?=?fy?-?mScroller.getFinalY();??
  23. ????????smoothScrollBy(dx,?dy);??
  24. ????}??
  25. ??
  26. ????//调用此方法设置滚动的相对偏移??
  27. ????public?void?smoothScrollBy(int?dx,?int?dy)?{??
  28. ??
  29. ????????//设置mScroller的滚动偏移量??
  30. ????????mScroller.startScroll(mScroller.getFinalX(),?mScroller.getFinalY(),?dx,?dy);??
  31. ????????invalidate();//这里必须调用invalidate()才能保证computeScroll()会被调用,否则不一定会刷新界面,看不到滚动效果??
  32. ????}??
  33. ??????
  34. ????@Override??
  35. ????public?void?computeScroll()?{??
  36. ??????
  37. ????????//先判断mScroller滚动是否完成??
  38. ????????if?(mScroller.computeScrollOffset())?{??
  39. ??????????
  40. ????????????//这里调用View的scrollTo()完成实际的滚动??
  41. ????????????scrollTo(mScroller.getCurrX(),?mScroller.getCurrY());??
  42. ??????????????
  43. ????????????//必须调用该方法,否则不一定能看到滚动效果??
  44. ????????????postInvalidate();??
  45. ????????}??
  46. ????????super.computeScroll();??
  47. ????}??
  48. } ?
  相关解决方案