Android 笔记 transition / 转换动画

本文详细介绍了Android中的Transition框架,包括如何实现Activity切换动画、ViewAnimationUtils的使用以及布局变动动画。重点讨论了Transition Framework在不同场景下的应用,如SurfaceView、TextureView和AdapterView的限制,并提供了创建简单活动切换动画的Java代码示例,还探讨了ViewAnimationUtils的circleReveal方法在平滑动画效果中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Transition

之前有了解一丁点转换动画,比如说不同activity之间转换的动画,或者公共部件之间的转换动画,笔记做的很简略。

这里又(稍微)仔细的了解了一下官网的关于转换动画的介绍。

使用transition framwork
Material-Animations,就是上面那条的英文版,还有例子
Transition-android developer
定义定制动画-android developer

摘录于第一个参考里面的:

Android Transition Framework可以实现三种效果:

1,不同Activity之间切换时,Activityc的内容(contentView)转场动画
2,不同Activity之间切换时,如果使用了Shared Element动画,也可以使用Transition FrameWork来实现不 同的过渡动画效果
3,同一个Activity内View变化的过渡动画(Scene)

其实,看上面的参考就很清楚了,但是因为有些比较重要的容易忽略的东西,必须在这里记下来。

首先,如果要使用activity的切换动画,需要使用startActivity(intent,bundle)
其中第二个参数一般为ActivityOptionsCompat.makeSceneTransitionAnimation().toBundle()

然后,并不是所有场合都适用转换动画。
(简单翻译自官网的说明)
1,surfaceView 不能正常应用转换动画
2,部分动画在textureView上工作不正常
3,AdapterView的子类,比如listView,与transition不兼容
4,有文字的view比如textView会在调整大小的时候文字显示错误。

创建简单的activity切换动画

用java code创建简单的切换动画

//设置退出的时候显示的动画
getWindow().setExitTransition(new Slide(Gravity.LEFT).setDuration(500));
//设置进入的时候显示的动画
getWindow().setEnterTransition(new Fade(Fade.IN).setDuration(500));

在theme里面有一个比较重要的设置

<!-- 允许使用transitions -->  
<item name="android:windowContentTransitions">true</item>  
<!--是否覆盖执行,其实可以理解成是否同步执行还是顺序执行-->  
<item name="android:windowAllowEnterTransitionOverlap">false</item>  
<item name="android:windowAllowReturnTransitionOverlap">false</item>

如果没有设置,默认是同步执行,也就是说退出当前activity,进入新activity是同步执行
实际效果并不好。

其中,上面设置的参数是内建的fade动画,具体可以查询transition的api参考。

然后使用startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(thisActivity).toBundle());
来启用动画。如果用普通的startActivity(intent)是没有效果的

同时,我们希望在打开的activity里面按返回键以后退出到上一步的activity的时候也显示动画,也需要设置如下:

//按返回键以后,退出的activity显示的动画
getWindow().setReturnTransition(new Fade(Fade.IN).setDuration(500));
//按返回键以后,重新进入的上一步的activity显示的动画
getWindow().setReenterTransition(new Fade(Fade.IN).setDuration(500));

ViewAnimationUtils

发现一个实用的动画工具,ViewAnimationUtils
里面只有一个静态的方法
static Animator createCircularReveal (View view,
int centerX,
int centerY,
float startRadius,
float endRadius)

这个方法创建了一个animator,从参数就可以看出,就是创建一个圆环放大的动画,需要设置中心点,起始半径,最终半径。
配合各种动画效果,可以实现很平滑的效果。

比如在点击某按钮以后,需要显示新内容的地方来这么一个揭露动画,效果棒极了。

需要注意的是,这个揭露动画是覆盖目标view的
也就是说,相当于一个覆盖在目标view上的一个幕布,然后揭露隐藏在幕布下面的内容。
所以可以在anim.start()之前就设置好要显示的内容,然后动画再开始执行动画。

和其他的动画一样,可以设置一个listener。

布局变动动画

Transition-google developer
实用transition
正如官网介绍的一样,在应用的布局发生变动的时候,可以展现动画来显示变动。
具体的在官网和之前的参考里面都有。
简单说明一下
1,可以对一个需要变动的布局设置成scene,然后用transitionManager来启动不同scene之间变化的动画。
2,如果使用TransitionManager.beginDelayedTransition(mView, mFade);那么可以不设置scene,在接下来的改变布局参数的时候,就自动用动画来展示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值