LayoutTransition--Android布局变化时的动画实现

Posted by tong木头 on July 7, 2017

介绍

在开发中经常会动态的改变ViewGroup中子View的状态,比如改变子View的可见性。默认是没有动画效果的,看起来会比较生硬。这个时候如果加上一个过渡动画就再好不过了,方法也很简单,就是用LayoutTransition。Android在api11提供了该类。

用法

1. 在xml中配置动画

android:animateLayoutChanges="true"

2. 在代码中添加动画

ViewGroup  container = (ViewGroup) findViewById(R.id.container);
LayoutTransition transition = new LayoutTransition();
container.setLayoutTransition(transition);

注意不管是xml还是代码都是加在ViewGroup上面的,之后该ViewGroup的子View状态改变时就会显示动画了。

自定义动画效果

先来介绍一个在设置个性化参数时常用的5个参数

APPEARING 作用于在容器中出现的view
CHANGE_APPEARING 作用于那些因为新view出现而发生变化的view
CHANGE_DISAPPEARING 作用于那些因为view消失而发生变化的view
CHANGING 不是因为有view出现或者消失,而是因为layout位置发生变化,api16添加
DISAPPEARING 作用于在容器中消失的view

设置动画时长

LayoutTransition transition = new LayoutTransition();
transition.setDuration(LayoutTransition.APPEARING, 800);

设置动画开始的延迟时间

LayoutTransition transition = new LayoutTransition();
transition.setStartDelay(LayoutTransition.APPEARING, 0);

使用自己自定义的动画

LayoutTransition transition = new LayoutTransition();
ObjectAnimator appearAnim = ObjectAnimator  
                .ofFloat(null, "rotationY", 90f, 0)  
                .setDuration(800); 
transition.setAnimator(LayoutTransition.APPEARING, appearAnim);