Android Transition(Android过渡动画)

本文详细介绍了Android中的Transition动画,包括Scene Transition、Activity过渡动画和Shared Element Transition。Transition动画提供了视图层级结构的切换效果,支持自定义动画。在Activity过渡动画部分,讲解了API 21前后的不同实现方式,并展示了如何通过ActivityOptions和Transition实现更丰富的动画效果。共享元素过渡动画则允许元素在不同Activity间平滑过渡,通过设置transitionName实现元素对应关系。文章还涵盖了动画的监听、延时处理等细节。
摘要由CSDN通过智能技术生成

       在Android 4.4 Transition 就已经引入了,但在Android 5.0(API 21)之后,Transition 被更多的应用起来。相对于View Animation或Property Animator,Transition动画更加具有特殊性,Transition可以看作对Property Animator的高度封装。不同于Animator,Transition动画具有视觉连续性的场景切换。

       为了对Transition有一个大概的了解,我们通过:Scene Transition(场景过渡动画)、Activity过渡动画、Shared Element Transition(共享元素过渡动画)这三个方面来做一个简单的了解

一、Scene Transition(场景过渡动画)

       场景过渡动画是指以动画的形式实现View两个场景的切换(从一个场景切换到另一个场景)。而且在切换过程中通过Transition来设置不同的过渡动画效果。

       场景过渡动画中有两个特别关键概念:Scene(场景),Transition(过渡)

  • Scene:Scene代表一个场景。Scene保存了一个视图层级结构,包括它所有的views以及views的状态,通常由getSceneForLayout (ViewGroup sceneRoot,int layoutId,Context context)获取Scene实例。Transition框架可以实现在starting scene和ending scene之间执行动画。而且大多数情况下,我们不需要创建starting scene,因为starting scene通常由当前UI状态决定,我们只需要创建ending scene。
  • Transition:Transiton则是用来设置过渡动画效果用的。而且系统给提供了一些非常使用的Transtion动画效果,如下表所示:
系统Transition 解释
ChangeBounds 检测View的位置边界创建移动和缩放动画(关注布局边界的变化)
ChangeTransform 检测View的scale和rotation创建缩放和旋转动画(关注scale和ratation的变化)
ChangeClipBounds 检测View的剪切区域的位置边界,和ChangeBounds类似。不过ChangeBounds针对的是view而ChangeClipBounds针对的是view的剪切区域setClipBound(Rect rect) 中的rect(关注的是setClipBounds(Rect rect)rect的变化)
ChangeImageTransform 检测ImageView的ScaleType,并创建相应动画(关注的是ImageView的scaleType)
Fade 根据View的visibility状态的的不同创建淡入淡动画,调整的是透明度(关注的是View的visibility的状态)
Slide 根据View的visibility状态的的不同创建滑动动画(关注的是View的visibility的状态)
Explode 根据View的visibility状态的的不同创建分解动画(关注的是View的visibility的状态)
AutoTransition 默认动画,ChangeBounds、Fade动画的集合

       要想实现一个场景过渡动画,至少需要一个transition实例和一个ending scene实例。并通过TransitionManager执行过渡动画。TransitionManager执行动画有两种方式:TransitionManager.go()、beginDelayedTransition()。下面简单来介绍下这两种开启场景动画的方式。

1.1、TransitionManager.go()开启场景动画

用说TransitionManager.go()实现场景动画之前,先上效果图


TransitionManager.go()实现场景动画

       TransitionManager.go()需要两个参数:第一个参数代表要过渡到的场景(end scene)、第二个参数过渡动画(transition 实例)。

       TransitionManager.go()启动动画的时候,场景一般通过布局文件给出。场景实例的获取则通过Scene.getSceneForLayout()来获取,需要三个参数:第一个参数代表场景所在的ViewGroup、第二个参数代表场景布局文件、第三个参数布局文件转换View所需要的Content。

TransitionManager.go()的场景是通过布局文件指定。

1.2、beginDelayedTransition()开启场景动画

用beginDelayedTransition()实现场景动画的效果图


beginDelayedTransition实现场景动画

      通过TransitionManager.beginDelayedTransition()也可以开启场景动画。在执行TransitionManager.beginDelayedTransition()之后,系统会保存一个当前视图树状态的场景,之后当我们改变了View的属性之后(比如重新设置了View位置、缩放、clipe等等)。在下一次绘制时,系统会自动对比之前保存的视图树,然后执行相应动画。

二、Activity过渡动画

2.1、API 21之前Activity过渡动画使用

      API21之前Activity过渡动画通过两种方式来实现:style主题里面统一设置、或者使用代码overridePendingTransition函数单独设置。(当然了代码设置的优先级要高于style主题里面统一设置)

  • style文件主题里面统一定义,全局为所有Activity设置过渡动画效果。
<item name="android:windowAnimationStyle">@style/Animation.Activity.Customer</item>
 
 
 
  • 1
    <style name="Animation.Activity.Customer" parent=
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值