欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

为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);