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


转载于:https://my.oschina.net/sunqiyao/blog/664412

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值