滑动之Fling

作者: 白与兰与白兰地 | 来源:发表于2019-05-16 11:27 被阅读5次

    1. fling基础(未考虑多指滑动)

    初始化

    //获取认为是fling的最小速率
    mMinimumFlingVelocity=  ViewConfiguration.get(context).getScaledMinimumFlingVelocity();
    
    //借助VelocityTracker速率辅助计算类在onTouchEvent中处理
    initVelocityTracker();
    mVelocityTracker.addMovement(event);
    

    fling动作是在手指完全抬起后发生的,因此在MotionEvent.ACTION_UP中处理

     //计算当前滑动速率,该方法性能消耗很大,参数单位为毫秒
     mVelocityTracker.computeCurrentVelocity(1000);
    //获取计算后得到的X轴滑动速率
    int initVelocity = (int) mVelocityTracker.getXVelocity();
    //快速向右滑动|| 快速向左滑动
    if (initVelocity > mMinimumFlingVelocity|| initVelocity < -mMinimumFlingVelocity) {
    mScroller.fling(getScrollX(), getScrollY(), -initVelocity, 0, (int) mLeftEdge, (int) mRightEdge, getScrollY(), getScrollY());
    }
    //缓慢滑动不处理
    else {
    }
    

    最后一定记得在MotionEvent.ACTION_UPMotionEvent.ACTION_CANCEL中释放资源

    recycleVelocityTracker();
    
    private void recycleVelocityTracker() {
            if (mVelocityTracker != null) {
                mVelocityTracker.recycle();
                mVelocityTracker = null;
            }
      }
    
    private void initVelocityTracker() {
            mVelocityTracker = mVelocityTracker == null ? mVelocityTracker = VelocityTracker.obtain() : mVelocityTracker;
      }
    

    2. fling推荐

    推荐使用GestureDetector处理手势,其内部封装了一系列常用手势,并以回调的方式通知手势发生

    mGestureDetector = new GestureDetector(context, gestureListener);
    mGestureDetector.onTouchEvent(event);
    
    private GestureDetector.SimpleOnGestureListener gestureListener = new GestureDetector.SimpleOnGestureListener() {
            //惯性滑动
            @Override
            public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
                //注意,使用Scroller类需要手动invalidate,这样computeScroll才会在重绘时被调用
                mScroller.fling(getScrollX(), getScrollY(), (int) -velocityX, 0, (int) mLeftEdge, (int) mRightEdge, getScrollY(), getScrollY());
                invalidate();
                return super.onFling(e1, e2, velocityX, velocityY);
            }
    }
    

    相关文章

      网友评论

        本文标题:滑动之Fling

        本文链接:https://www.haomeiwen.com/subject/vmncgftx.html