View的滑动

View的滑动使用场景很多,下拉刷新也是滑动的一种。掌握View的滑动使用非常重要。

View的滑动实现可分为三种,各有缺失点。

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


1. 使用scrollTo/scrollBy
这种滑动只是实现了当前位置的相对滑动,只能改变View的内容的位置变化,不能改变View的布局变化。值得注意的是如果从左向右滑动和从上往下滑动,那么对应的mScrollX和mScrollY是负值。
这里写图片描述

2. 使用动画
使用动画移动View,主要是通过对View的translationX和translationY属性改变来实现。因为translationX和translationY属性是Android 3.0以上才提供的属性值,所以为了在Android 3.0以下实现这种动画效果。需要采用nineoldandroids(http://nineoldandroids.com
V我的动画是对View的影像进行操作,并不能该变View真正的位置信息,如果希望动画之后的状态得到保留,,必须将fillAfter属性设置为true。尽管这样,View的位置信息也没改变,只是它的影像发生位置变化,这样就带来了一个问题,如果这个View是一个Button,滑动以后再次点击Button,发现点击效果无效,如果点击Button原来的位置,点击事件就能触发,这是因为这是View影像发生位移,View本身还在原来的位置。如果在Android3.0 以下使用属性动画,就能解决以上问题,因为3.0以下使用的开源库兼容,本质就是使用了View的scrollTo/scrollBy实现滑动效果。

3. 改变布局参数
改变布局参数,就是改变LayoutParams。比如我们要把一个Button右移100dp,只需要在Button的Layoutparams里面的marginLeft参数值增加一百。或者在Button的左边放置一个空的View,让后改变View的宽度。(假设布局为LinearLayout)。代码示例如下:

MarginLayoutParams params = (MarginLayoutParams)mButton1.getLayoutParams();
params.width += 100;
params.leftMargin += 100;
mButton1.requestLayout();
//或者mButton1.setLayoutParams(params);

三者的区别和总结:

  • scrollTo/scrollBy:操作简单,只对View的内容滑动,适合View的内容滑动
  • 动画:操作简单,主要适合用于没有交互的View和实现复杂的动画效果
  • 改变布局参数:操作先稍微复杂,适用于有交互的View

猜你喜欢

转载自blog.csdn.net/cqx13763055264/article/details/80820849