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

本文探讨了安卓开发中View的滑动实现,包括View自带的scrollTo/scrollBy方法、改变LayoutParams以及利用动画来实现滑动的效果。每种方法都有其适用场景,如scrollTo/scrollBy不影响内部元素点击,改变LayoutParams适合交互性View,动画则适用于复杂动画。最后,文章预告将讲解如何实现弹性滑动Scroller以提升用户体验。



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

    


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值