Android VelocityTracker类和Scroller类

 

  1. VelocityTracker类:用于跟踪触屏事件的速度,通常使用VelocityTracker的步骤如下:
    • static VelocityTracker obtain():获取一个VelocityTracker实例
    • void addMovement(MotionEvent event):添加motion event到VelocityTracker实例中
    • void computeCurrentVelocity(int units):计算当前的速度,units用于设置速度单位,units为1表示每毫秒多少像素,units为1000表示每秒多少像素
  2. Scroller类封装了滚动,用于计算view滚动的位置,可以设置滚动发生的时长,滚动结束时computeScrollOffset函数会返回false,否则返回true。
  3. 常用函数:
    • 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的值.往右滚动返回负值
  4. View与滚动相关的函数: 
    • public void computeScroll():是View类的一个空函数,父容器需要更新子view的位置时调用
    • public void scrollTo(int x,int y):滚动view到指定位置,这个位置是相对于view的初始位置的距离.
    • public void scrollBy(int x,int y):滚动view的距离,往右和往下是负值
  5. 使用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();
        }
    }
posted on 2015-01-13 20:54 哨兵 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/phenixyu/p/4222448.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值