Android Scroller类和VelocityTracker类
- Scroller类
- Scroller类封装了滚动,用于计算view滚动的位置,可以设置滚动发生的时长,滚动结束时computeScrollOffset函数会返回false,否则返回true。
- 常用函数:
- public void startScroll(int startX,int startY,int dx,int dy,int duration):设置滚动的起点坐标,横轴和纵轴滚动的距离以及滚动的时间。要注意的是dx<0是往右滚动,dy<0是往下滚动
- public boolean computeScrollOffset():返回true说明滚动尚未完成,false就说明滚动完成了,该函数通常放在View.computeScroll函数中用于判断滚动是否结束。在duration时间内一直返回false
- pubilc final int getCurrX():相对于滚动开始点的横轴距离,即相对于startX的距离,注意不是相对于屏幕左上角。在滚动未完成时这个值一直在变。
- public final int getFinalX():返回滚动的距离,即dx的值.往右滚动返回负值
- View与滚动相关的函数:
- public void computeScroll():是View类的一个空函数,在父容器重画自己的孩子时,会调用孩子的computeScroll方法
- public void scrollTo(int x,int y):滚动view到指定位置,这个位置是相对于view的初始位置的距离.
- public void scrollBy(int x,int y):滚动view的距离,往右和往下是负值
- 使用Scroller类自定义ViewGroup的实例:
public class MyViewGroup extends LinearLayout { private boolean recover=true; Scroller mScroller=null; public MyViewGroup(Context context, AttributeSet attrs) { super(context, attrs); mScroller=new Scroller(context); } //实际发生滚动的函数 @Override public void computeScroll() { if (mScroller.computeScrollOffset()) { int deltX=mScroller.getCurrX(); int deltY=mScroller.getCurrY(); scrollTo(deltX, deltY); postInvalidate(); } } public void beginScroll(){ if (!recover) { mScroller.startScroll(0, 0, 0, 0, 10000); recover = true; } else { mScroller.startScroll(0, 0, -100, -100, 10000); recover = false; } invalidate(); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。