1.使用 scrollTo/scrollBy
scrollBy实际上也是调用了scrollTo方法。
scrollBy实现了基于当前位置的相对滑动,scrollTo则实现了基于所传参数的绝对滑动。
scrollTo和scrollBy只能改变View内容的位置而不能改变View在布局中的位置。
源码
当View左边缘在View内容的左边缘的右边时,mScrollX为正值,反之为负值;当View的上边缘在View内容上边缘的下边时,mScrollY为正值,反之为负值。换句话说,如果从左向右滑动,那么mScrollX为负值,反之为正值:如果从下往上滑动,那么mScrollY为负值,反之为正值。
2.使用动画
使用动画来移动View,主要是操作View的translationX和translationY属性,既可以用传统的View动画,也可以采用属性动画。
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:fillAfter="true">
<translate
android:duration="1000"
android:fromXDelta="0"
android:fromYDelta="0"
android:interpolator="@android:anim/linear_interpolator"
android:toXDelta="100"
android:toYDelta="100" />
</set>
ObjectAnimator.ofFloat(targetView, "translationX", 0, 100).setDuration(100).start();
View动画是对View的影像操作,它并不能真正改变View的位置参数,包括宽高,动画后的状态保留必须将fillAfter属性设置为true。属性动画不存在这个问题
3.改变布局参数
即改变LayoutParams,比如一个按钮向右平移100px
ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) mBtn.getLayoutParams();
layoutParams.leftMargin += 100;
mBtn.requestLayout();
//或者 mBtn.setLayoutParams(layoutParams);
4.三种方式的对比总结
- scrollT/scrollBy:操作简单,适合对View内容的滑动
- 动画:操作简单,适用于实现复杂的动画效果,View动画适用于没有交互的View,属性动画没有明显缺点
- 改变布局参数:稍复杂,适用于有交互的View
网友评论