前言
总所周知,自定义view在写对应的触控事件要重写onTouchEvent,根据不同的Action来进行我们的处理,Android也提供了一个GestureDetectorCompat来方便开发者快速的获取一些常用的手势事件。
处理滑动也有ScrollTo() ScrollBy()最原始的移动view内容的方法,而且都是瞬间移动没有平滑处理的,而Android同样提供了一个OverScroller来方便开发者进行view的平滑处理。
GestureDetectorCompat(触摸手势识别)
- 单击的情况
点击时间很短:onDown —-> onSingleTapUp —-> onSingleTapConfirmed
点击时间稍长:onDown —-> onShowPress —-> onSingleTapUp —-> onSingleTapConfirmed
2.长按的情况
onDown —-> onShowPress —-> onLongPress
3.滑动的情况
手指触动屏幕后,稍微滑动后立即松开:
onDown —-> onScroll —-> onScroll —-> onScroll —-> ……… —-> onFling
4双击的情况
双击 onDown —-> onSingleTapUp —-> onDoubleTap
示例代码
OverScroller(滑动处理计算器)
OverScroller 这个类只负责计算坐标,移动要自己实现。
基础知识
移动view/ViewGroup的内容的位置
scrollTo scrollBy
注意scrollTo scrollBy 滑动的是view/ViewGroup的内容,而不是自己本身。
scrollTo是绝对位置移动,scrollBy是在当前位置叠加。以被移动的内容做参照物,它的坐标轴是和平时相反的,例如移动到(300,100)在scrollTo上表达的是scrollTo(-300,-100),例如当前坐标叠加(x+30,y+40)在scrollBy上表达的是scrollBy(-30,-40)
getScrollX getScrollY
原点和已滑动的坐标相减,表示滑动的偏移量
移动view/ViewGroup本身的位置
offsetLeftAndRight offsetTopAndBottom
在当前位置叠加偏移
layout
最直接修改view布局的位置
setLayoutParams
修改布局的参数来修改位置
VelocityTracker 计算滑动速度
直接上实例代码
坐标
getStartX() 滑动的起点x轴坐标
getStartY() 滑动的起点y轴坐标
getFinalX()滑动的终点x轴坐标
getFinalY()滑动的终点y轴坐标
getCurrX()滑动中途x轴坐标
getCurrY()滑动中途y轴坐标
startScroll(平滑移动)
startX startY 开始移动的坐标, dx dy水平和垂直方向滑动的距离偏移值,duration 移动时间/ms。
fling(带加速度的移动)
startX startY 开始移动坐标,velocityX velocityY 速度,minX minY 最小能移动到的xy坐标位置, maxX maxY最大能移动到的xy坐标位置 , overX overY允许溢出边界 回弹效果。
computeScrollOffset(判断移动是否完成)
用来判断是否滑动是否结束
示例代码与效果
|
|