一、前言

在 Android 5.0 以后,Google 为 Activity 的转场设计了更加友好的动画效果。

转场动画(Activity Transition)基本介绍
Android 5.0 提供了三种 Transition 类型

  • 进入:决定Activity中的所有的视图怎么进入屏幕。
  • 退出:决定一个Activity中的所有视图怎么退出屏幕。
  • 共享元素:决定两个activities之间的过渡,怎么共享(它们)的视图。

进入和退出包含如下动画效果

  • explode(分解) – 从屏幕中间进或出
  • slide(滑动) - 从屏幕边缘进或出地
  • fade(淡出) –通过改变屏幕上视图的不透明度达到添加或者移除视图的效果

共享元素包含如下动画效果

  • changeBounds - 改变目标视图的布局边界
  • changeClipBounds - 裁剪目标视图边界
  • changeTransform - 改变目标视图的缩放比例和旋转角度
  • changeImageTransform - 改变目标图片的大小和缩放比例

二、传统转场动画

1. 效果图

2. 实现代码

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translate android:fromXDelta="100%"android:toXDelta="0%"android:duration="500" />
</set>
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"><translate android:fromXDelta="0%"android:toXDelta="-40%"android:duration="500" />
</set>
startActivity(new Intent(this, Activity2.class));
overridePendingTransition(R.anim.slide_right_in, R.anim.slide_left_out);

三、新转场动画

5.0 新的转场动画分为 4 种,Explode、Slide、Fade、Share。
1. 效果图

Explode
Explode 的效果是下一个页面的元素从四面八方进入,最终形成完整的页面。代码如下:

// 跳转
Intent intent = new Intent(this, CActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());// 跳转的Activity
public class CActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().setEnterTransition(new Explode());setContentView(R.layout.activity_c);}
}

在跳转时就要注意一点,intent 后面还要再传一个参数 bundle,固定写法ActivityOptions.makeSceneTransitionAnimation(this).toBundle(),下一个 Activity 根据这个就能识别出使用 5.0 新转场动画。

Slide
Slide 就是下一个页面元素从底部依次向上运动,最终形成完整的页面。代码如下:

// 跳转
Intent intent = new Intent(this, CActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());// 跳转的Activity
public class CActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().setEnterTransition(new Slide());setContentView(R.layout.activity_c);}
}

Fade
Fade 就是下一个页面元素渐变出现,最终形成完整的页面。代码如下:

// 跳转
Intent intent = new Intent(this, CActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this).toBundle());// 跳转的Activity
public class CActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().setEnterTransition(new Fade());getWindow().setExitTransition(new Fade());setContentView(R.layout.activity_c);}
}

同样,就是跳转的 Activity 在 onCreate 方法中设置 transition 为 Fade 即可,只不过这里要最好要同时设置 Enter 和 Exit 。

Share
Share 是最复杂的一种转场方式,在跳转的两个 Activity 之间,如果有相同的 View 元素,那么,两个元素就可以设置成共享状态,在跳转时,这个 View 就会从第一个 Activity 的显示状态过渡到第二个 Activity 的显示状态,给用户的感觉仿佛是两个 Activity 共享一个 View 。

  • 效果图

  • 布局文件

<!-- 首先,两个Activity共享的元素需要设置相同的transitionName: android:transitionName="fab" -->
<Buttonandroid:id="@+id/fab_button"android:layout_width="56dp"android:layout_height="56dp"android:background="@mipmap/ic_launcher"android:elevation="5dp"android:onClick="explode"android:transitionName="fab" /><Buttonandroid:id="@+id/fab_button"android:layout_width="160dp"android:layout_height="160dp"android:layout_alignParentEnd="true"android:layout_below="@id/holder_view"android:layout_marginTop="-80dp"android:background="@mipmap/ic_launcher"android:elevation="5dp"android:transitionName="fab" />
  • 实例代码
// 跳转时,要为每一个共享的view设置对应的transitionName
View fab = findViewById(R.id.fab_button);
View txName = findViewById(R.id.tx_user_name);
intent = new Intent(this, CActivity.class);
startActivity(intent, ActivityOptions.makeSceneTransitionAnimation(this,Pair.create(view, "share"),Pair.create(fab, "fab"),Pair.create(txName, "user_name")).toBundle());
// 跳转的Activity在onCreate方法中开启Transition模式
public class CActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);setContentView(R.layout.activity_c);}
}

【Android -- 动画】Activity 转场动画相关推荐

  1. android自定义转场动画,Activity转场动画(5.0+)

    设置transitionName 首先,我们需要选定变换开始和结束的元素,给它们设置一个相同的transitionName, 我这个例子中,开始变换的元素是列表中的图片 android:id=&quo ...

  2. android 揭示动画,Android进阶设计 | 使用揭露动画(Reveal Effect)做一个丝滑的Activity转场动画...

    提笔之际(附总体思路) 最近跟几个小伙伴在实践一个项目,考虑到界面效果,我们决定使用揭露动画作为Activity的转场动画. 这里主要是我负责这部分的实现. 话说之前是没接触过的,关于具体的实现跟大体 ...

  3. android Activity转场动画makeSceneTransitionAnimation

    1.activity转场动画实现有很多,这里主要记录ActivityOptions实现转场动画. 1.makeSceneTransitionAnimation实现,网上很多说要添加下面这句代码 < ...

  4. Android Reveal圆形Activity转场动画

    一.效果 二.知识点 CircularReveal动画.透明主题.转场动画(非必须) 三.方案 假设有两个Activity A和B.Reveal圆形Activity转场动画效果先从A到B,那么基本方案 ...

  5. android 转场动画 监听,Android 中的转场动画及兼容处理

    Android 中的动画有很多,除了在一个界面上使用帧动画.属性动画将一个或多个 View 进行动画处理以外,还可以用于两个界面之间过渡.跳转.在 Android 5.0 之前,我们已经有了 over ...

  6. 安卓Activity转场动画

    安卓Activity转场动画:两个Activity进行跳转的时候,转场动画 1,ActivityOptions 适合API21及安卓5.0以上版本 2,兼容类:ActivityOptionsCompa ...

  7. Android开发之Activity转场动画

    引子 相信开发过iOS的程序员都知道iOS ViewController之间的跳转动画非常多,很酷对不对?这让开发Android的羡慕不已,曾几何时,Android中的Activity跳转是何等的生硬 ...

  8. Android转场动画,Avtivity转场动画;

    转场动画 - 共享元素动画 先看效果: Activity1点击小图标开启Activity2: 开启Activity2效果就像是小图标放大了填充上去的,关闭Activity2回到Activity1时又像 ...

  9. activity 转场动画不生效_replugin插件化,插件转场动画失效的问题解决

    说明 随着应用功能的丰富,Android程序的安装包也逐渐变大,这成为应用程序现有框架下难以摆脱的瓶颈.所以引入了rePlugin插件化框架,将应用按功能拆分为插件,以此减小apk的大小并同时增加应用 ...

最新文章

  1. “智能+”时代,看见别人看不见的才是赢家
  2. python 日志 logging 的用法
  3. 人群运动--Scene-Independent Group Profiling in Crowd
  4. 正则表达式 右上角加号_最全正则表达式讲解实战,附源码,敲一遍学会
  5. nodejs之connect
  6. hive左关联剔除和where 剔除不一致
  7. UNITY ET 框架
  8. pkill mysql_centos下kill、killall、pkill命令区别
  9. 为什么我电脑的所有浏览器都开不了网页
  10. 【Codeforces 1114C】Trailing Loves (or L'oeufs?)
  11. 单片机c语言仿真,单片机c语言教程:C51表达式语句及仿真器
  12. 36令牌环网的基本原理
  13. dsp2812软件周期耗时测试,基于DSP2812设计的简易数字频率计
  14. 单工,半双工,全双工区别以及TDD和FDD区别
  15. python实现csv行列转置
  16. 西电数据挖掘实验3——复杂网络社团检测
  17. 科技正渗透进你生活的全部
  18. 【SAP PO】SAP PO 接口配置完整教程之二REST服务对接
  19. 仅有银行转账凭证,是否可认定为民间借贷关系
  20. 线性规划问题可行域中的极点、方向与最优解

热门文章

  1. to be delete
  2. 关于光电催化实验中的量子产率与量子效率
  3. ios预览在线pdf
  4. Haproxy在socket/tcp下传输数据的使用实例
  5. CPU 温度监控软件(lm_sensors)
  6. 匈牙利命名法之VB篇
  7. 基于中颖8位MCU的触摸按键方案
  8. 分组背包 以 一本通1272为例
  9. 2021-2022毕业一年工作总结--华为外包VRP自动化测试
  10. 如何使用Markdown排版微信公众号推文