视图组 (ViewGroup)中子元素的出场效果

Posted 我想月薪过万

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了视图组 (ViewGroup)中子元素的出场效果相关的知识,希望对你有一定的参考价值。

效果展示

  • 视图组(ViewGroup)中子元素可以具备出场时的补间动画效果
  • 常用需求场景:为ListView的 item 设置出场动画
  • 使用步骤:

第一步:设置 子元素 的出场动画

res/anim/view_animation.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:duration="300">
    <translate android:fromXDelta="-100%p" android:toXDelta="0%p"/>
</set>

第二步:设置 视图组 的动画文件

res/anim/layout_animation.xml

<?xml version="1.0" encoding="utf-8"?>
<layoutAnimation
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:delay="0.5"
    // 子元素开始动画的时间延迟
    // 如子元素入场动画的时间总长设置为300ms
    // 那么 delay = "0.5" 表示每个子元素都会延迟150ms才会播放动画效果
    // 第一个子元素延迟150ms播放入场效果;第二个延迟300ms,以此类推

    android:animationOrder="normal"
    // 表示子元素动画的顺序
    // 可设置属性为:
    // 1. normal :顺序显示,即排在前面的子元素先播放入场动画
    // 2. reverse:倒序显示,即排在后面的子元素先播放入场动画
    // 3. random:随机播放入场动画

    android:animation="@anim/view_animation"
    // 设置入场的具体动画效果
    // 将步骤1的子元素出场动画设置到这里
/>

第三步:为 视图组(ViewGroup) 指定 andorid:layoutAnimation 属性

指定的方式有两种: XML / Java代码设置

方式1:在 XML 中指定

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <ListView
        android:id="@+id/lv_show_data"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layoutAnimation="@anim/layout_animation" />
</LinearLayout>

方式2:在Java代码中指定

这样就不用额外设置 res/anim/layout_animation.xml 该xml文件了

        lv_show_data = findViewById(R.id.lv_show_data);
        
        //获取单个 View 动画
        Animation animation = AnimationUtils.loadAnimation(this,R.anim.view_animation);
        //创建视图组动画
        LayoutAnimationController controller = new LayoutAnimationController(animation);
        controller.setDelay(0.5f);
        controller.setOrder(LayoutAnimationController.ORDER_NORMAL);
        //为 ViewGroup 设置动画
        lv_show_data.setLayoutAnimation(controller);

效果展示

 

至此,Android 动画中的补间动画的所有知识点都讲解完毕。

以上是关于视图组 (ViewGroup)中子元素的出场效果的主要内容,如果未能解决你的问题,请参考以下文章

Android动画使用

Android 视图和视图组

Android:从视图中获取视图组?

自定义 ViewGroup 示例?

bzoj 2844: albus就是要第一个出场

Android 动画 6问6答