View事件体系之--View的滑动

来源:互联网 发布:etf联接基金 知乎 编辑:程序博客网 时间:2024/05/06 09:44



        我们在安卓开发中会碰到各种各样的滑动,比如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”的实现原理。

    


0 0