Android 笔记 transition / 转换动画

来源:互联网 发布:域名隐藏转发 编辑:程序博客网 时间:2024/06/08 15:05

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,在接下来的改变布局参数的时候,就自动用动画来展示。

0 0
原创粉丝点击