我们在安卓开发中会碰到各种各样的滑动,比如ListView的滑动,Viewpager的滑动,scrollview的滑动,滑动让我们的app看起来更加的生动,用户体验也大大增强,如果我们想基于View或者ViewGroup来自定义View的话,那么对View的滑动更加要有所了解。
总体来说一般使View产生滑动可以通过以下几种办法:
一.View自带的scrollTo/scrollBy方法
View自带了使自己滑动的方法,我们来看看这两个方法内部是如何实现让View移动的。
首先是scrollTo():
public void scrollTo(int x, int y) { //参数是要移动到的位置x,y if (mScrollX != x || mScrollY != y) {//判断要移到的位置是否与现在的位置重复 int oldX = mScrollX; int oldY = mScrollY; mScrollX = x; mScrollY = y;
<span style="font-family: Arial, Helvetica, sans-serif;">//流畅的移动view到指定位置,并刷新视图</span>
invalidateParentCaches(); onScrollChanged(mScrollX, mScrollY, oldX, oldY); if (!awakenScrollBars()) { postInvalidateOnAnimation(); } } }
再看看scrollBy():
public void scrollBy(int x, int y) { scrollTo(mScrollX + x, mScrollY + y); }
可以看出scrollBy()里面只是调用了scrollTo(),只是他的滑动增加了一个累加减的过程。
二.改变LayoutParams的方法(改变布局参数)
一个view的布局参数决定了这个view的位置,所以我们想要移动view,当然可以通过改变布局参数然后要求重绘的方式来达到移动view的效果。
MarginLayoutParams params=(MarginLayoutParams)mButton.getLayoutParams();//首先获得view的原始布局参数 params.width+=10;//改变布局参数 params.leftMargin+=10; mButton.requestLayout();
三.利用动画
动画可以轻松实现view的移动,这里不多说了。
三种view的滑动方式的对比:
scrollTo/scrollBy:可以方便的实现滑动并且不影响内部元素的单击事件,但是它只能滑动View的内容,而不能滑动View的本身。
改变布局参数的方法:基本没有什么缺点,实现起来相对麻烦而已,它很适合一些具有交互性的View.
动画方式:主要适用于没有交互的view和实现复杂的动画效果。
上面说的几种view的滑动方式只是实现了View的生硬滑动,为了达到更加好的用户体验,我们还必须让滑动更加的富有弹性,更加的生动,所以下一篇记录一下“弹性滑动Scroller”的实现原理。