难度
中等
效果说明
越界回弹的效果不用多说了吧,大家应该都知道, 不知道的看下方效果图。
效果图
特性说明
- 支持阻尼系数
- 支持多指触控
- 支持上拉回弹、下拉回弹
- 支持设置开启/关闭回弹:ENABLED_ALL、ENABLED_TOP、ENABLED_BOTTOM 、ENABLED_NONE
- 不影响原有手势的分发处理
- 支持设置最大滑动距离
- 支持设置插值器
实现原理
整体采用offsetTopAndBottom()
+ValueAnimator
实现。
事件分发处理
重写dispatchTouchEvent(MotionEvent ev)
方法,在ACTION_DOWN
中判断是否可以下拉或者上拉,如果可以,就拦截此次事件
滑动处理
在ACTION_MOVE
中,计算每次滑动的差值diffY
,然后使用offsetTopAndBottom()
进行滑动
手指抬起处理
在ACTION_UP
中,获取已滑动的距离scrollY
,然后使用ValueAnimator
计算每一帧滑动的距离,最后再次使用offsetTopAndBottom()
进行滑动
多点触控
多点触控其实很简单,都是有套路可寻的,只要单点触控没问题,多点触控其实很好实现,因为虽然是多点触控,但是实际上只有一个手指处于活跃状态。
关于dispatchTouchEvent(MotionEvent ev)
方法
在Android的整个事件传递体系中,很