android 之View 一

来源:互联网 发布:淘宝网页登陆 编辑:程序博客网 时间:2024/04/29 19:54

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()

@Overridepublic 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;@Overridepublic 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;}


0 0
原创粉丝点击