在Android应用的界面交互开发中,过渡动画可以让界面切换更加自然流畅。当单个过渡动画无法满足复杂的视觉需求时,我们可以通过transition set XML文件将多个过渡动画组合在一起,实现多动画同时或按顺序播放的效果。

transition set XML的基本结构
transition set是Android中用于组合多个过渡动画的容器,对应的XML标签是<transitionSet>,所有需要组合的过渡动画都作为它的子元素存在。基础的XML结构如下:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 这里放置多个过渡动画元素 -->
</transitionSet>
常用属性说明
<transitionSet>标签支持多个属性来控制子动画的播放行为,常用的属性如下:
- android:transitionOrdering:设置子动画的播放顺序,可选值为together(同时播放,默认值)和sequential(按顺序依次播放)。
- android:duration:设置整个组合动画的播放时长,单位毫秒,会覆盖子动画单独设置的时长。
- android:interpolator:设置组合动画的插值器,控制动画的变化速率。
- android:startDelay:设置组合动画的启动延迟时间,单位毫秒。
组合多个过渡动画的实现步骤
1. 创建transition set XML文件
在项目的res/transition目录下新建XML文件,比如命名为combined_transition.xml,内容如下,组合了淡入淡出动画和位移动画:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="together"
android:duration="500">
<!-- 淡入淡出动画 -->
<fade
android:fadingMode="fade_in_out" />
<!-- 位移动画,从底部滑入 -->
<slide
android:slideEdge="bottom" />
</transitionSet>
2. 在代码中加载并使用组合动画
我们可以通过TransitionInflater来加载XML中定义的transition set,然后应用到界面切换场景中。以下是Activity中使用该组合动画的示例代码:
import android.os.Bundle;
import android.transition.Transition;
import android.transition.TransitionInflater;
import android.transition.TransitionManager;
import android.view.ViewGroup;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private ViewGroup rootView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rootView = findViewById(R.id.root_view);
// 加载transition set XML
Transition combinedTransition = TransitionInflater.from(this)
.inflateTransition(R.transition.combined_transition);
// 应用过渡动画到根布局
TransitionManager.beginDelayedTransition(rootView, combinedTransition);
// 这里可以修改界面元素的状态,触发动画执行
}
}
3. 按顺序播放多个动画的配置
如果需要让多个过渡动画按顺序播放,只需要将android:transitionOrdering属性设置为sequential即可,修改后的XML示例如下:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="sequential"
android:duration="300">
<!-- 先执行淡入动画 -->
<fade android:fadingMode="fade_in" />
<!-- 再执行从顶部滑入的动画 -->
<slide android:slideEdge="top" />
</transitionSet>
注意事项
transition set XML中只能放置过渡动画相关的元素,比如<fade>、<slide>、<changeBounds>等,不能放置属性动画相关的<objectAnimator>元素,否则会导致动画加载失败。
如果子动画单独设置了时长和插值器,而transition set也设置了对应的属性,那么子动画的属性会被transition set的属性覆盖,这一点在配置动画时需要注意。
当组合动画应用到Fragment切换场景时,需要在Fragment的onCreate方法中设置setAllowEnterTransitionOverlap和setAllowReturnTransitionOverlap属性,避免动画出现重叠异常。
Android_transitiontransition_setXML动画过渡动画修改时间:2026-07-19 18:36:25