android 之View 一

1.MotionEvent

ACTION_DOWN,ACTION_UP,ACTION_MOVE

getX/getY相对当前View 左上角X ,Y

getRawX/getRawY 相对手机屏幕左上角X,Y

2. TouchSlop(常量跟设备有关,Android源码中定义为8dp

系统所能识别的最小滑动距离

获取方式: ViewConfiguration.get(getBaseContext()).getScaledTouchSlop();返回的是像素

3. VelocityTracker

用于追踪手指在屏幕的滑动速度(有X,Y两个方向)速度可以是负值

用法:在ViewonTouchEvent()

@Override

    public boolean onTouchEvent(MotionEvent event) {

//创建

     VelocityTracker velocityTracker=VelocityTracker.obtain();

     velocityTracker.addMovement(event);

     //计算

     velocityTracker.computeCurrentVelocity(1000);//设定计算时间,毫秒为单位

     float XVelocity=velocityTracker.getXVelocity();

     float YVelocity=velocityTracker.getYVelocity();

     Log.d(TAG, "XVelocity: "+XVelocity+" YVelocity: "+YVelocity);

     return super.onTouchEvent(event);

}

注意:不需要使用时要回收占用的内存

velocityTracker.clear();

velocityTracker.recycle();

 

4. GestureDetector

检测单击,滑动,双击等行为

使用方法

1. 创建一个GestureDetector对象并实现OnGestureListener()接口,根据需求也可以实现OnDoubleTapListener().

2. 监听自定义ViewonTouchEvent方法,返回mGestureDetector.onTouchEvent

5. Scroller

用于实现View的弹性滑动

scrollerTo(),scrollerBy()只能改变view中内容位置,不能改变view在布局的位置

一个简单View 滑动例子:

int mLastX=0,mLastY=0;

@SuppressLint("NewApi") @Override

public boolean onTouchEvent(MotionEvent event) {

// 相对本身来滑动,也可以相对手机屏幕来滑动

int x=(int)event.getX();

int y=(int)event.getY();

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

break;

case MotionEvent.ACTION_MOVE:

int deltaX=x-mLastX;

int deltaY=y-mLastY;

int translationX=(int)getTranslationX()+deltaX;

int translationY=(int)getTranslationY()+deltaY;

setTranslationX(translationX);

setTranslationY(translationY);

break;

case MotionEvent.ACTION_UP:

//松手后回到初始位置

setTranslationX(0);

setTranslationY(0);

break;

}

mLastX=x;

mLastY=y;

return true;

}

你可能感兴趣的:(android,view)