Android--LayoutAnimation介绍

本文介绍了Android的LayoutAnimation,用于为ViewGroup添加动画并控制子View的显示顺序。讲解了如何通过LayoutAnimationsController实现动画播放,包括XML配置和Java代码设置。还详细探讨了如何自定义播放顺序,复写getTransformedIndex方法来实现更灵活的动画控制。
摘要由CSDN通过智能技术生成

1、简介

在Android中,最简单的动画就是补间动画(Tweened Animations)了。通过补间动画,可以对一个控件进行位移、缩放、旋转、改变透明度等动画。但是补间动画只能对一个控件使用,如果要对某一组控件播放一样的动画的话,可以考虑layout-animation。

Layout Animation 可以用来为 ViewGroup 添加动画,并且按照预定的顺序把一个动画或者一个动画集合应用到 ViewGroup 的每一个子View。我们可以使用 LayoutAnimationController 来指定一个应用到 ViewGroup 的每个子View的动画。

2、LayoutAnimationsController

LayoutAnimationsController可以用于实现使多个控件按顺序一个一个的显示。

  • LayoutAnimationsController用于为一个layout里面的控件,或者是一个ViewGroup里面的控件设置统一的动画效果。
  • 每一个控件都有相同的动画效果。
  • 控件的动画效果可以在不同的时间显示出来。
  • LayoutAnimationsController可以在xml文件当中设置,以可以在代码当中进行设置。

3、Xml配置

1、在res/anim文件夹下创建一个名为layout_anim.xml文件

2、由于layout-animation是对于某一组控件的操作,就需要一个基本的动画来定义单个控件的动画。另外还可以定义动画的显示顺序和延迟:

<layoutAnimation xmlns:android="http://schemas.android.com/apk/res/android"
    android:delay="30%"
    android:animationOrder="reverse"
    android:animation="@anim/zoom_in"/>
  • android:delay表示动画播放的延时,既可以是百分比,也可以是float小数。
  • android:animationOrder表示动画的播放顺序,有三个取值normal(顺序)、reverse(倒序)、random(随机)。
  • android:animation指向了子控件所要播放的动画。

其中delay的单位为秒,animation为设置动画的文件,animationOrder为进入方式。

<!-- res/anim/zoom_in.xml -->
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/decelerate_interpolator" >

    <scale
        android:duration="1000"
        android:fromXScale="0.1"
        android:fromYScale="0.1"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />
    <alpha
        android:duration="1000"
        android:fromAlpha="0"
        android:toAlpha="1.0" />
</set>

我们写好了 LayoutAnimation 和 子动画,就要把它配置到我们的 ViewGroup里面,这里就用一个简单的ListView。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ListView
        android:id="@+id/lv"
        android:scrollbars="vertical"
        android:layoutAnimation="@anim/layout_anim"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>
public class MainActivity extends AppCompatActivity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listView = (ListView) findViewById(R.id.lv);
        List<String> list = new ArrayList<String>();
        for(int i=0;i<20;i++)
        {
            list.add("因人而异"+i);
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, list);
        listView.setAdapter(adapter);
    }
}

因为我们在 Xml 中已经指定好 ListView 的 LayoutAnimation 啦,所以我们只要给它添加一个适配器就 OK了。

4、Java代码配置

Animation animation = AnimationUtils.loadAnimation(this, R.anim.zoom_in);
LayoutAnimationController lac=new LayoutAnimationController(animation);
lac.setOrder(LayoutAnimationController.ORDER_NORMAL);
listView.setLayoutAnimation(lac);
listView.startLayoutAnimation();

用 Java 代码配置就不用写LayoutAnimation啦,我们只要在上面的代码中手动去加载子动画,然后用LayoutAnimationController去把子动画配置到每一个子View中就可以啦。

可以看到我们把顺序已经被我们改为正序啦。

5、自定义播放顺序

通过上面的介绍,相信大家对 LayoutAnimationController 的功能已经有了一个比较清晰的认识,这种对 ViewGroup 的操作,对我们的动画效果有很大的帮助,但Android原生布局动画,仅支持顺序、倒序、随机3种动画执行顺序,这就使我们的动画有些简陋,不能适用于所有我们需要的效果。现在我就讲讲如何自定义一个播放 LayoutAnimation动画的顺序。

我们要自定义,首先就要知道 Android API 是如何实现顺序、倒序、随机这3种动画执行顺序的,我们来看看:

protected int 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值