Android自定义View滑动事件处理总结

 

滑动处理需要用到的各种工具类:


android.view.VelocityTracker

android.view.OverScroller

android.view.ViewConfiguration

 

VelocityTracker类 

 

主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。

用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中。你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率,但是使用它们之前请先调用computeCurrentVelocity(int units)来初始化速率的单位 。

 

computeCurrentVelocity(int units, float maxVelocity)

unitis表示速率的基本时间单位。unitis值为1的表示是,一毫秒时间单位内运动了多少个像素, unitis值为1000表示一秒(1000毫秒)时间单位内运动了多少个像素
maxVelocity表示速率的最大值 
 
 1 @Override
 2     public boolean onTouchEvent(MotionEvent event) {
 3         // 获得允许执行一个fling手势动作的最大速度值
 4         int mMaximumVelocity = ViewConfiguration.get(context)
 5                 .getScaledMaximumFlingVelocity();
 6 
 7         // 实例化
 8         VelocityTracker mVelocityTracker = VelocityTracker.obtain();
 9         mVelocityTracker.addMovement(event);
10         int action = event.getAction();
11         float y = event.getY();
12 
13         switch (action) {
14         case MotionEvent.ACTION_DOWN:
15 
16             return true;
17         case MotionEvent.ACTION_MOVE:
18 
19             break;
20         case MotionEvent.ACTION_CANCEL:
21             // 回收
22             mVelocityTracker.recycle();
23 
24             break;
25         case MotionEvent.ACTION_UP:
26             // 初始化速率的单位
27             mVelocityTracker.computeCurrentVelocity(1000, mMaximumVelocity);
28             int velocityY = (int) mVelocityTracker.getYVelocity();
29 
30             // 回收
31             mVelocityTracker.recycle();
32 
33             break;
34         }
35 
36         return super.onTouchEvent(event);
37     }

 

OverScroller类

 

是为了实现View平滑滚动的一个Helper类。它的作用就是辅助记录和计算我们滑动的距离和速度这些,用于自定义移动时帮我们处理掉数学的计算部分。

1 OverScroller mScroller = new OverScroller(context);
2 //滚动,startX, startY为开始滚动的位置,dx,dy为滚动的偏移量, duration为完成滚动的时间
3 mScroller.startScroll(int startX, int startY, int dx, int dy) 
4 //使用默认完成时间250ms
5 mScroller.startScroll(int startX, int startY, int dx, int dy, int duration)
6 //返回值为boolean,true说明滚动尚未完成,false说明滚动已经完成。
7 mScroller.computeScrollOffset()

 

设置mScroller滚动的位置时,并不会导致View的滚动,通常是用mScroller记录/计算View滚动的位置,再重写View的computeScroll(),完成实际的滚动。

 

 

ViewConfiguration类

 

这个类主要定义了UI中所使用到的标准常量,像超时、尺寸、距离,如果我们需要得到这些常量的数据,我们就可以通过这个类来获取

1  //获得触发移动事件的最短距离,如果小于这个距离就不触发移动控件
2 int mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop();
3 //获得允许执行一个fling手势动作的最大速度值
4 int mMaximumVelocity = ViewConfiguration.get(context).getScaledMaximumFlingVelocity();
5 //获得允许执行一个fling手势动作的最小速度值
6 int mMinimumVelocity = ViewConfiguration.get(context).getScaledMinimumFlingVelocity();

 

 

如果布局控件以及其子控件的尺寸进行精确的控制那就要重写下面这个方法了

onMeasure(int widthMeasureSpec, int heightMeasureSpec)

 

 

转载于:https://www.cnblogs.com/l2rf/p/5029615.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值