android-view-滑动

滑动是实现绚丽的自定义控件的基础。

  • 基础知识
  • 弹性滑动
  • 滑动冲突

一 基础知识

MotionEvent

事件类型

  • ACTION_DOWN:手指刚接触屏幕
  • ACTION_MOVE:手指在屏幕上移动
  • ACTION_UP:手指从屏幕上松开的一瞬间

getX/getY:相对于当前View左上角的坐标

getRawX/getRawY:相对于手机屏幕左上角的坐标

TouchSlop

系统所能识别的滑动最小距离。常量值,与设备有关。

ViewConfiguration.get(getContext()).getScaledTouchSlop()

VelocityTracker

速度追踪,手指在滑动过程中的速度(一段时间内手指滑过的像素数)。

// onTouchEvent方法中使用
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);

// 滑动速度
velocityTracker.computeCurrentVelocity(1000);
int xVelocity = (int) velocityTracker.getXVelocity();
int yVelocity = (int) velocityTracker.getYVelocity();

// 重置回收
velocityTracker.clear();
velocityTracker.recycle();

二 弹性滑动

Scroller|OverScroller

实现View的平滑移动。

Scroller scroller = new Scroller(mContext);

@Override
public void computeScroll() {
    if (mScroller.computeScrollOffset()) {
        scrollTo(mScroller.getCurrX(), mScroller.getCurrY());// 设置当前的滚动位置
        postInvalidate();
    }
}

三 滑动冲突

场景:

  • 内外滑动方向不一致
  • 内外滑动方向一致
  • 互相嵌套
发布了26 篇原创文章 · 获赞 4 · 访问量 2375

猜你喜欢

转载自blog.csdn.net/u010019244/article/details/84865905
今日推荐