【Android -- 动画】Activity 转场动画
一、前言
在 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 转场动画相关推荐
- android自定义转场动画,Activity转场动画(5.0+)
设置transitionName 首先,我们需要选定变换开始和结束的元素,给它们设置一个相同的transitionName, 我这个例子中,开始变换的元素是列表中的图片 android:id=&quo ...
- android 揭示动画,Android进阶设计 | 使用揭露动画(Reveal Effect)做一个丝滑的Activity转场动画...
提笔之际(附总体思路) 最近跟几个小伙伴在实践一个项目,考虑到界面效果,我们决定使用揭露动画作为Activity的转场动画. 这里主要是我负责这部分的实现. 话说之前是没接触过的,关于具体的实现跟大体 ...
- android Activity转场动画makeSceneTransitionAnimation
1.activity转场动画实现有很多,这里主要记录ActivityOptions实现转场动画. 1.makeSceneTransitionAnimation实现,网上很多说要添加下面这句代码 < ...
- Android Reveal圆形Activity转场动画
一.效果 二.知识点 CircularReveal动画.透明主题.转场动画(非必须) 三.方案 假设有两个Activity A和B.Reveal圆形Activity转场动画效果先从A到B,那么基本方案 ...
- android 转场动画 监听,Android 中的转场动画及兼容处理
Android 中的动画有很多,除了在一个界面上使用帧动画.属性动画将一个或多个 View 进行动画处理以外,还可以用于两个界面之间过渡.跳转.在 Android 5.0 之前,我们已经有了 over ...
- 安卓Activity转场动画
安卓Activity转场动画:两个Activity进行跳转的时候,转场动画 1,ActivityOptions 适合API21及安卓5.0以上版本 2,兼容类:ActivityOptionsCompa ...
- Android开发之Activity转场动画
引子 相信开发过iOS的程序员都知道iOS ViewController之间的跳转动画非常多,很酷对不对?这让开发Android的羡慕不已,曾几何时,Android中的Activity跳转是何等的生硬 ...
- Android转场动画,Avtivity转场动画;
转场动画 - 共享元素动画 先看效果: Activity1点击小图标开启Activity2: 开启Activity2效果就像是小图标放大了填充上去的,关闭Activity2回到Activity1时又像 ...
- activity 转场动画不生效_replugin插件化,插件转场动画失效的问题解决
说明 随着应用功能的丰富,Android程序的安装包也逐渐变大,这成为应用程序现有框架下难以摆脱的瓶颈.所以引入了rePlugin插件化框架,将应用按功能拆分为插件,以此减小apk的大小并同时增加应用 ...
最新文章
- “智能+”时代,看见别人看不见的才是赢家
- python 日志 logging 的用法
- 人群运动--Scene-Independent Group Profiling in Crowd
- 正则表达式 右上角加号_最全正则表达式讲解实战,附源码,敲一遍学会
- nodejs之connect
- hive左关联剔除和where 剔除不一致
- UNITY ET 框架
- pkill mysql_centos下kill、killall、pkill命令区别
- 为什么我电脑的所有浏览器都开不了网页
- 【Codeforces 1114C】Trailing Loves (or L'oeufs?)
- 单片机c语言仿真,单片机c语言教程:C51表达式语句及仿真器
- 36令牌环网的基本原理
- dsp2812软件周期耗时测试,基于DSP2812设计的简易数字频率计
- 单工,半双工,全双工区别以及TDD和FDD区别
- python实现csv行列转置
- 西电数据挖掘实验3——复杂网络社团检测
- 科技正渗透进你生活的全部
- 【SAP PO】SAP PO 接口配置完整教程之二REST服务对接
- 仅有银行转账凭证,是否可认定为民间借贷关系
- 线性规划问题可行域中的极点、方向与最优解