Android - Lollipop自定义Activity过渡动画

Lollipop 中提供了Activitiy Transition可很方便的在两个Activity实现流畅的过渡效果, 可用来替代Activity Animation.

  • ##界面进入退出的过渡动画
    Explode - 爆炸效果, 从界面中心向四周分散
    Slide - 滑动效果, 从界面边缘滑动 通过Gravity配置上下左右
    Fade - 渐变效果, 通过Visibility配置淡入淡出

上面三个类都在android.transition中, 你可以使用Java XML 两种方式来使用它

  • Java
Activity
1
2
3
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().setExitTransition(new Explode());
getWindow().setEnterTransition(new Explode());
  • XML
res/values/style.xml
1
2
3
4
5
<style name="AppBase" parent="android:Theme.Material">
<item name="android:windowContentTransitions">true</item>
<item name="android:windowExitTransition">@transition/explode</item>
<item name="android:windowEnterTransition">@transition/explode</item>
</style>
res/transition/explode.xml
1
<explode xmlns:android="http://schemas.android.com/apk/res/android"/>
  • 同时也是支持动画合集
1
2
3
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<explode />
</transitionSet>
1
2
3
TransitionSet set = new TransitionSet();
set.addTransition(new Explode());
getWindow().setEnterTransition(set);
  • 使用Transition跳转Activity
1
2
3
Intent intent = new Intent();
intent.setClass(this, TransitionDetilActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());
  • ##共享元素的过渡动画
    changeBounds - 视图布局边界变化
    changeClipBounds - 视图剪切边界变化
    changeTransform - 视图缩放和旋转变化
    changeImageTransform - 图片尺寸和缩放变化

上面四个类也是在android.transition中, 使用方法和上面大同小异

res/values/style.xml
1
2
3
4
5
<style name="AppBase" parent="android:Theme.Material">
<item name="android:windowContentTransitions">true</item>
<item name="android:windowSharedElementExitTransition">@transition/move_image</item>
<item name="android:windowSharedElementEnterTransition">@transition/move_image</item>
</style>

res/transition/move_image.xml
1
2
3
4
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
<changeBounds />
<changeImageTransform />
</transitionSet>
  1. 在Theme中激活 windowContentTransitions
  2. 在Theme中配置 windowSharedElementExitTransition
  3. 在Resource中定义 过渡动画
  4. 在目标Layout中 使用 android:transitionName 属性, 配置一个名称
  5. 使用ActivityOptions.makeSceneTransitionAnimation() 来跳转Activity
步骤4 transition_detail.xml
1
2
3
4
5
6
7
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:src="@drawable/ic_launcher"
android:transitionName="image"/>
步骤5 TransitionActivity
1
2
3
Intent intent = new Intent();
intent.setClass(this, TransitionDetilActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this, findViewById(R.id.image), "image").toBundle());
分享多个元素的方法
1
2
3
ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(this,
Pair.create(view1, "agreedName1"),
Pair.create(view2, "agreedName2"));

推荐阅读: http://developer.android.com/intl/zh-cn/training/material/animations.html#Transitions

Gavin Liu wechat
欢迎您扫一扫上面的二维码,订阅我的微信公众号!