Android开发艺术探索学习摘要(五)

来源:互联网 发布:linux free swap 编辑:程序博客网 时间:2024/05/18 00:24

1.TouchSlop是系统所能识别出的被认为是滑动的最小距离,这是一个常量,和设备有关,可以通过如下方式获取这个常量:

ViewConfiguration.get(getContext).getScaledTouchSlop()
2.VelocityTracker速度追踪,用于追踪手指在滑动过程中的速度。

获取VelocityTracker的实例对象

VelocityTracker velocityTracker=VelocityTracker.obtain();
在onTouchEvent回调函数中,将当前的移动时间传递给VelocityTracker对象
velocityTracker.addMovement(event);
计算当前速度(获取速度之前必须先计算速度)负方向滑动计算出来的速度是负值

velocityTracker.computeCurrentVelocity(1000);
获取当前速度

int xVelocity=(int) velocityTracker.getXVelocity();int yVelocity=(int) velocityTracker.getYVelocity();
重置并回收内存

velocityTracker.clear();velocityTracker.recycle();

3.GestureDetector手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为。如果只是监听滑动相关的,建议自己在onTouchEvent中实现,如果要监听双击这种行为的话,那么就使用GuestureDetector。

4.Scroller可以实现有过渡效果的滑动。

Scroller scroller = new Scroller(mContext);//缓慢滚动到指定位置private void smoothScrollTo(int destX,int destY){     int scrollX=getScrollX();     int delta=destX-scrollX;     //1000ms内滑向destX,效果就是缓慢滑动     mScroller.startScroll(scrollX,0,delta,0,1000);     invalidate();}public void computeScroll(){     if(mScroller.computeScrollOffset){          scrollTo(mScroller.getCurrX(),mScroller.getCurrY());          postInvalidate();     }}
5.实现View滑动的三种方式:第一种是通过View本身提供的scrollTo/scrollBy方法来实现滑动;第二种是通过动画给View施加平移效果来实现滑动;第三种是通过改变View的LayoutParams使得View重新布局从而实现滑动。

scrollTo和scrollBy只能改变View内容的位置而不能改变View在布局中的位置。

View动画是对View的影像做操作,它并不能真正改变View的位置参数。

8.三种实现方式的总结:

scrollTo/scrollBy:操作简单,适合对View内容的滑动

动画:操作简单,主要适用于没有交互的View和实现复杂的动画效果

改变布局参数:操作稍微复杂,适用于有交互的View
9.Scroller的工作原理:Scroller本身并不能实现View的滑动,它需要配合View的computeScroll方法才能完成弹性滑动的效果,它不断地让View重绘,而每一次重绘距滑动起始时间会有一个时间间隔,通过这个时间间隔Scroller就可以得出View当前的滑动位置,知道了滑动位置就可以通过scrollTo方法来完成View的滑动。就这样,View的每一次重绘都会导致View进行小幅度的滑动,而多次小幅度滑动就组成了弹性滑动。