Android动画一:Activity过渡动画详细实现原理
虽然 Android 5.0 之后推出了新的过渡动画方式,但通常只是用于特定的场合使用,activity.overridePendingTransition()
通用方式的过渡动画还是很常用。
原理分析
startActivity(Intent(this,SecondActivity::class.java)) overridePendingTransition(enterAnim, exitAnim)
overridePendingTransition有两个参数,第一个参数(enterAnim)是作用于SecondActivity 的进入屏幕可见区域
效果,第二个参数(exitAnim)是作用于当前 Activity 离开屏幕可见区域
效果。
示意图
RightIn:从右边滑入屏幕(iOS默认效果)
iOS 默认的效果,新的Activity从右边(R)进入显示区域,当前Activity从左边离开显示区域到(L)。
enterAnim(activity_right_to_left_enter.xml):X轴从 100% 到 0
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromXDelta="100%" android:toXDelta="0" /> </set>
exitAnim(activity_right_to_left_exit.xml):X轴从 0 到 -100%
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromXDelta="0" android:toXDelta="-100%" /> </set>
使用
startActivity(Intent(this,SecondActivity::class.java)) overridePendingTransition(R.anim.activity_right_to_left_enter, R.anim.activity_right_to_left_exit)
BottomIn:从底部弹出Activity(常用效果)
一般从底部弹出新Activity,就是从B区域到屏幕可见区域,当前的Activity是保持不变的。
enterAnim(activity_bottom_to_top_enter.xml):Y轴从 100% 到 0
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromYDelta="100%" android:toYDelta="0" /> </set>
exitAnim(no_anim.xml):Y轴保持不变
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromYDelta="0" android:toYDelta="0"/> </set>
使用
startActivity(Intent(this,SecondActivity::class.java)) overridePendingTransition(R.anim.activity_bottom_to_top_enter, R.anim.no_anim)
RightOut(和RightIn对应,iOS 默认效果)
前面讲了startActivity的转场动画,下面讲finish()的转场动画。overridePendingTransition有两个参数,第一个参数(enterAnim)是作用于上一个Activity的进入屏幕可见区域效果,第二个参数(exitAnim)是作用于当前 Activity 离开屏幕可见区域效果。
iOS默认的finish动画,是当前的Activity从屏幕可见区域到R区域,上一个Activity从L区域到屏幕可见区域。
enterAnim(activity_left_to_right_enter.xml):X轴从 -100% 到 0
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromXDelta="-100%" android:toXDelta="0" /> </set>
exitAnim(activity_left_to_right_exit.xml):X轴从 0 到 100%
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromXDelta="0" android:toXDelta="100%" /> </set>
使用
finish() overridePendingTransition(R.anim.activity_left_to_right_enter, R.anim.activity_left_to_right_exit)
BottomOut(和BottomIn对应,常用效果)
从屏幕底部滑出效果是,当前Activity从底部滑出屏幕可见区域,上一个Activity保持不变,和BottomIn不同的是,enterAnim是不需要使用动画,因为上一个Activity已经在屏幕的后面了,只需要改变当前Activity消失的效果。
exitAnim(activity_top_to_bottom_exit.xml):Y轴从 0 到 100%
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <translate android:duration="300" android:fromYDelta="0%" android:toYDelta="100%" /> </set>
使用
finish() overridePendingTransition(0, R.anim.activity_top_to_bottom_exit)
完整示例代码
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
渲染流水线中的光栅化
Rasterization,光栅化,又称为栅格化,它用于执行绘图指令生成像素的颜色值。光栅化是渲染流水线中的一个重要环节,但是不同的 UI Toolkit 和不同浏览器渲染引擎使用的光栅化策略并不一样,本文主要讨论各种不同的光栅化策略和它们各自的优劣。 渲染流水线 上图是一个渲染流水线的极简版示意图,适用于大部分的 UI Toolkit 和浏览器渲染引擎,当然实际的细节可能会有出入。 DOM/View - 构建或者改变 DOM 树(UI Toolkit 一般称为 View 或者 Widget); Style/Layout - 计算样式和重排版(又称为布局); Layerize - 图层化,将不同的 DOM/View 子树按一定的规则归属到不同的图层,构建或者更新图层树/列表; Paint - 绘制图层,输出 DisplayList(2D 绘图
- 下一篇
搞定iOS推送SDK集成,看这篇文章就够了!
一次偶然的机会,公司的项目要用到推送,我自己本来就很懒,不愿意去弄整套APNS的流程,刚好之前跟朋友聊起过他们的产品中集成了个推的Android推送,说是体验还可以,那这次我就试一下他们的iOS推送。于是抱着试一试的心态,我先建个demo,试着去集成一下个推iOS推送SDK,摸索着完成了整个流程,言归正传,直接上硬菜! 如何集成个推iOS SDK 看了个推的官网,发现他们集成的方式有两种,分别是XCode集成和CocoaPods集成。本人比较懒,越简单越好,越轻松越好,毫不犹豫的选择了Cocoapods集成方式,程序猿么,就是要想尽办法的懒,搞起! CocoaPods集成 1.安装CocoaPods 安装方式简单, Mac 下都自带 ruby,使用 ruby 的 gem 命令即可下载安装: $ sudo gem install cocoapods $ pod setup 2.准备Podfile文件 在我们的工程目录下,新建一个名为Podfile的文件,如下格式,将依赖的库名字依次列在文件中即可: 作者这里使用的是标准版本: target 'GeTuipush' do platform ...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS6,CentOS7官方镜像安装Oracle11G
- SpringBoot2整合Redis,开启缓存,提高访问速度
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Hadoop3单机部署,实现最简伪集群
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果