View的滑动

Android中View可以通过三种方式实现滑动

  • 通过View本身提供的scrollTo/scrollBy方法实现滑动。
  • 通过动画给View施加平移效果开实现滑动。
  • 通过改变View的LayoutParams,使得View重新布局从而实现滑动。

scrollTo/ScrollBy

scrollTo实现了基于所传递参数的绝对滑动,scrollBy则是实现了基于当前位置的相对滑动。从源码上看,scrollBy实际上就是调用了scrollTo方法。scrollTo/scrollBy 只能改变View内容的位置,而不能改变View在布局中的位置。
操作简单,适合对View的内容的滑动。

动画

主要是操作View的translationX和translationY属性。View动画是对View的影像做操作,它并不能真正改变View的位置参数,包括宽/高。并且如果希望动画后的状态得以保留还必须将fillAfter属性设置为true。
主要适用于没有交互的View和实现复杂的动画效果。

LayoutParams

这种方法实现View的滑动,就是改变布局的参数,即改变LayoutParams。这种方法操作稍微复杂,适用于有交互的View。

实现弹性滑动

Scroller

可以通过Scroller实现View的弹性滑动,其实就是通过一次次调用scrollTo方法来实现的。invalidate方法导致View重绘。在重绘时的draw方法中会去调用computeScroll方法(该方法在View中是一个空方法因此需要自己去实现),而computeScroll方法又会去向Scroller获取当前的scrollX和scrollY,然后通过scrollTo方法实现滑动,接着又去调用postInvalidate方法进行第二次重绘,这一次重绘和第一次重绘一样,还是会导致computeScroll方法被调用。
computeScrollOffset这个方法会根据时间的流逝来计算当前scrollX和scrollY的值,概念类似插值器,该方法返回true表示滑动还未结束,返回false则表示滑动已经结束。

动画

通过动画也可以实现View的弹性滑动。其实现思想和Scroller比较类似。

延时策略

延时策略实现Vied弹性滑动的核心思想:通过发送一系列延时消息从而达到一种渐进式的效果,具体来说可以使用Handler或View的postDelayed方法,也可以使用线程的sleep方法。

你可能感兴趣的:(View的滑动)