View基础

View的位置参数

MotionEvent

包括三种类型:

  1. ACTION_DOWN
  2. ACTION_MOVE
  3. ACTION_UP

getX/getY 相对于View的坐标
getRawX/getRawY 相对于手机屏幕的坐标

TouchSlop-滑动的最小距离

获取该常量(8dp)

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

VelocityTracker-速度追踪

获取

1
VelocityTracker mVelocityTracker=VelocityTracker.obtain();

测速

1
2
3
4
5
6
//跟踪当前事件
mVelocityTracker.addMovement(event);
//获取速度
mVelocityTracker.computeCurrentVelocity(1000);//设置测速时间段
float xVelocity=mVelocityTracker.getXVelocity();
float yVelocity=mVelocityTracker.getYVelocity();

回收

1
2
3
//回收,释放内存
mVelocityTracker.clear();
mVelocityTracker.recycle();

GestureDetector-手势检测

1
2
3
mGestureDetector=new GestureDetector(context, this);//实现OnGestureListener接口
mGestureDetector.setIsLongpressEnabled(false);//解决长按屏幕无法拖动的现象
mGestureDetector.setOnDoubleTapListener(this);//实现OnDoubleTapListener

接管onTouchEvent方法

1
2
boolean consume=mGestureDetector.onTouchEvent(event);
return consume;

Tip: 监听滑动相关,自己在onTouchEvent中实现;监听双击之类,用GestureDetector

Scroller-弹性滑动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void smoothScrollTo(int destX,int destY,int duration){
mScroller.startScroll(getScrollX(),getScrollY(),destX-getScrollX(),destY-getScrollY(),duration);
}
public void smoothScrollBy(int x,int y,int duration){
mScroller.startScroll(getScrollX(),getScrollY(),x+getScrollX(),y+getScrollY(),duration);
}
@Override
public void computeScroll() {
if (mScroller.computeScrollOffset()) {
scrollTo(mScroller.getCurrX(),mScroller.getCurrY());
postInvalidate();
}
}
如果文章对你有帮助,给我些鼓励吧!