项目地址:https://github.com/SherlockShi/AndroidMaterialAnimationPractise
一、前言
同overridePendingTransition()方法执行效果类似
Content Transition也称为Transitions between Activities,或Enter/Exit Transition,包括下图4个部分(本图截取自Udacity):
- 1. Exit A: 离开A界面时的转换动画
- 2. Enter B: 进入B界面时的转换动画
- 3. Return B: 从B界面返回时的转换动画;可不设置,默认执行
Enter B
的逆过程 - 4. Reenter A: 重新进入A界面时的转换动画;可不设置,默认执行
Exit A
的逆过程
二、效果图
三、实现方法
1. 编码实现
ActivityA.java
1 |
|
ActivityB.java
1 |
|
由于大部分相关API只支持API 19以上版本,甚至只支持API 21以上版本,因此需要添加如下判断:
1 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { |
2. XML & Code实例化实现
定义XML
res/transition-v21/fade.xml
1 | <?xml version="1.0" encoding="utf-8"?> |
res/transition-v21/slide.xml
1 | <?xml version="1.0" encoding="utf-8"?> |
Code实例化
ActivityA.java
1 |
|
ActivityB.java
1 |
|
3. XML & Style声明式实现(强烈推荐)
定义XML
如果没有其它属性要求,本步骤可跳过,直接在下一步使用系统定义好的XML
同XML & Code实例化实现
一样,声明XML文件
res/transition-v21/fade.xml
1 | <?xml version="1.0" encoding="utf-8"?> |
res/transition-v21/slide.xml
1 | <?xml version="1.0" encoding="utf-8"?> |
Style文件声明
res/values-v21/styles.xml
1 | <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> |
也可以直接使用系统提供的过渡效果:
1 | <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> |
声明打开Content Transitions(非必须)
如果上一个步骤继承的父主题不是AppCompt相关主题,还需要在styles.xml文件中声明:
1 | <item name="android:windowContentTransitions">true</item> |
四、跳转
1 | startActivity(new Intent(ActivityA.this, ActivityB.class), |
五、返回
1 | finishAfterTransition(); |
六、参考资料
https://github.com/lgvalle/Material-Animations
PS:欢迎关注SherlockShi博客