参考博客:Android艺术开发探索第三章——View的事件体系(上)
一.View的基础知识
view控件的位置参数
- Left = getLeft();
- Right = getRight();
- Top = getTop();
- Bottom = getBottom():
- translationX 偏移量
- translationY 偏移量
view的触摸事件
- ACTION_DOWN一手指刚接触屏幕
- ACTION_MOVE一—手指在屏幕上移动
- ACTION_UP——手机从屏幕上松开的一瞬间
getX/getY返回的是相对于当前View左上角的x和y坐标,而geiRawX/getRawY返回的是相对于手机屏幕左上角的x和y坐标
2.TouchSlop
ViewConfigurtion.get(getContext()).getScaledTouchSlop 小于这个值时,不是滑动事件;
3.VelocityTracker
速度追踪,用于追踪手指在屏幕上滑动的速度,包括水平和竖直方向上的速度
4.GestureDetector
手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为
onSingleTapUp(单击),onFling(快速滑动),onScroll(推动),onLongPress(长按)和onDoubleTap(双击)
5.Scroller
弹性滑动对象,用于实现View的弹性滑动
二.View的滑动
1.使用scrollTo/scrollBy
scrolTo和scrollBy只能改变View内容的位置而不能变View在布局中的位置。
2.使用动画
View动画是对View的影像做操作,它并不能真正改变View的位置参数,包括高宽。
如果希望动画后的状态得以保存还必须将fillAfter属性设置为true,否则动画完成之后就会消失
3.改变布局参数
改变布局参数,即改变LayoutParams
4.各种滑动方式的对比
- scrollTo/scrollBy:操作简单,适合对View内容的滑动:
- 动画:操作简单,主要适用于没有交互的Visw和实现复杂的动画效果
- 改变布局参数:操作稍微复杂,适用于有交互的View
三.弹性滑动
1.Scroller
Scroller 本身不能进行弹性滑动的效果,它需要配合computeScroll才能完成弹性滑动效果;
滑动过程中,页面会不断的重绘,每次重绘都有一段时间间隔,多次重绘,就会实现弹性滑动。
2.通过动画
onAnimationUpdate
3.使用延时策略
具体来说可以使用Handler或View的postDelayed方法,也可以使用线程的sleep方法。