为listview、或者recyclerView的item增加进场动画
程序员文章站
2022-05-04 19:53:30
...
使用Android提供给我们的LayoutAnimation,LayoutAnimation作用于ViewGroup,为ViewGroup制定一个动画,在这里我们给ListView或者RecyclerView添加一个LayoutAnimation动画,当他的子元素出场时都会具有这种动画效果
第一步:定义一个LayoutAnimation,在res/anim文件夹下创建anim_list.xml,代码如下
<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
android:delay="0.5"
android:animationOrder="normal"
android:animation="@anim/anim_item">
其中delay是开始动画的时间延迟,这个跟下面的子元素anim_item的动画周期有关,如果子元素的动画时间周期为300ms,那么delay为0.5表示每个元素都要延时300ms * 0.5 = 150ms才能播放入场动画,第一个元素延迟150ms,第二个元素延时300ms以此类推……
animationOrder表示动画出厂顺序:normal顺序显示、reverse逆向显示、random随机播放入场动画
animation为子元素具体的入场动画
第二步:为子元素指定入场动画,在res/anim文件夹下新建anim_item.xml,代码如下
<?xml version="1.0" encoding="utf-8"?>
<set
xmlns:android="http://schemas.android.com/apk/res/android"
android:duration="300"
android:interpolator="@android:anim/accelerate_interpolator"
android:shareInterpolator="true">
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"/>
<translate
android:fromYDelta="500"
android:toYDelta="0"/>
</set>
这里我们给子元素添加一个透明度动画(alpha)和一个平移动画(translate)
第三步:为ListView或者RecyclerView指定LayoutAnimation,这样listview或者recyclerView的item就有入场动画了
<android.support.v7.widget.RecyclerView
android:id="@+id/mMultiChoiceView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layoutAnimation="@anim/anim_list">
</android.support.v7.widget.RecyclerView>
另外:除了在xml中指定LayoutAnimation外,代码实现可以通过LayoutAnimationController实现,在这里指定一个listview的动画
ListView listView = findViewById(R.id.listview);
Animation animation = AnimationUtils.loadAnimation(this,R.anim.anim_item);
LayoutAnimationController controller = new LayoutAnimationController(animation);
controller.setDelay(0.5f);
controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
listView.setLayoutAnimation(controller);