Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >在布局切换之间实现Transition动画

在布局切换之间实现Transition动画

作者头像
用户1108631
发布于 2019-08-17 04:52:41
发布于 2019-08-17 04:52:41
1.6K00
代码可运行
举报
运行总次数:0
代码可运行

同一个Activity之间,布局切换是可以有动画效果的,下面是仿照API Demo中的一个例子,如下图:

在同一个Activity中,通过选中不同的Scene,切换不同的布局。

实现

在两个Layout之间进行动画的基本步骤如下:

  1. 为起始和结束Layout创建Scene对象,一般来说,当前布局就是起始布局;
  2. 创建一个Transition对象,定义你想要的动画;
  3. 调用TransitionManager.go()方法,系统将会自动进行布局动画。

步骤是不是很简单?整个流程图如下:

创建Scene

Scene可以理解为对布局的一个快照,包含了View的层次以及各种属性相关的信息。Transition框架可以自动在起始和结束Scene之间进行动画。

从布局文件中创建Scene

调用Scene.getSceneForLayout()方法创建一个Scene,其中第一个参数是一个ViewGroup,第二个参数是布局id。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Scene.getSceneForLayout(scene_root, R.layout.layout_scene_1, this)
从代码中创建Scene

xml布局中定义的View层次也是可以通过代码定义的,只不过比较麻烦,这里就不介绍了。

应用Transition

可以使用android已经提供的一些Transition,比如AutoTransition、Fade,或者定义自己的Transition。然后调用TransitionManager.go()方法即可。

创建Transition

标签

属性

效果

AutoTransition

淡出、移动和改变尺寸、淡入

Fade

android:fadingMode="[fadein ,fadeout,fadeinout]"

控制淡出淡入

ChangeBounds

移动和改变尺寸

以上就是内置的类型以及在xml中对应的标签。Transition和属性动画、View Animation一样,都是可以在xml中定义的,举个例子,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<fade xmlns:android="http://schemas.android.com/apk/res/android" />

然后就可以通过代码获取到Transition实例,代码是

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var mFadeTransition: Transition =
    TransitionInflater.from(this)
                      .inflateTransition(R.transition.fade_transition)

而如果使用代码定义Transition,可以这么做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var mFadeTransition: Transition = Fade()
应用Transition

调用如下代码即可:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
TransitionManager.go(mEndingScene, mFadeTransition)

是不是很easy?这个demo的代码如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
secneRg.setOnCheckedChangeListener { group, checkedId ->
            var endScene: Scene? = null
            when (checkedId) {
                R.id.scene1Rb -> {
                    endScene = Scene.getSceneForLayout(scene_root, R.layout.layout_scene_1, this)
                }
                R.id.scene2Rb -> {
                    endScene = Scene.getSceneForLayout(scene_root, R.layout.layout_scene_2, this)
                }
                R.id.scene3Rb -> {
                    endScene = Scene.getSceneForLayout(scene_root, R.layout.layout_scene_3, this)
                }
                R.id.scene4Rb -> {
                    endScene = Scene.getSceneForLayout(scene_root, R.layout.layout_scene_4, this)
                }
            }
            TransitionManager.go(endScene, TransitionSet().apply {
                addTransition(Fade())
                addTransition(ChangeBounds())
            })
        }
选择指定目标View

默认情况下,整个View层次都是作为动画的对象,如果不想某些View有动画效果,可以在设置动画之前调用removeTarget()来进行清除。

Transition框架的限制

Transition框架有一些使用限制,

  1. 应用于SurfaceView的动画不会起效,因为其更新在非UI线程;
  2. 继承AdapterView的,比如ListView,不能应用Transition
  3. 如果你想在TextView中改变大小,那么在对象完成动画之前,文字会显示异常,为了避免这种情况,不要动画可能包含文字的View。

总结

关于代码,请参考Github地址

参考

  • https://github.com/lgvalle/Material-Animations
  • https://developer.android.google.cn/training/transitions/
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-01-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 每天学点Android知识 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【原创】基础篇--文件包含漏洞总结
服务器通过PHP的特性(函数)去包含任意文件时,由于要包含的这个文件来源过滤不严,从而可以去包含一个恶意文件,而我们可以构造这个恶意文件来达到攻击的目的。
用户6343818
2020/05/26
1.8K0
【原创】基础篇--文件包含漏洞总结
【原创】确定不看吗?基础篇--文件包含Bypass漏洞总结
本篇文章为星球团队成员原创文章,已申请原创权限,如其他公众号有需要转文,请联系信安旅程运营人员。
Power7089
2020/07/27
7280
【原创】确定不看吗?基础篇--文件包含Bypass漏洞总结
php文件包含漏洞分类目录文章标签友情链接联系我们
php文件包含漏洞 基本 相关函数 php中引发文件包含漏洞的通常是以下四个函数: include() include_once() require() require_once() reuqire(
用户1246209
2018/07/18
6850
PHP 文件包含漏洞姿势总结
文件包含漏洞的产生原因是在通过 PHP 的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
信安之路
2018/08/08
4.2K0
PHP 文件包含漏洞姿势总结
文件包含漏洞原理浅探
文件包含是指一个文件里面包含另外一个文件;开发过程中,重复使用的函数会写入单独的文件中,需要使用该函数的时候直接从程序中调用该文件即可,这一个过程就是“文件包含”
Mirror王宇阳
2020/11/12
5280
PHP一些常见的漏洞梳理
以下主要是近期对php一些常见漏洞的梳理,包含php文件包含、php反序列化漏洞以及php伪协议。其中 :
天钧
2020/09/14
4.6K0
PHP一些常见的漏洞梳理
干货 | 一文了解文件包含漏洞
本公众号提供的工具、教程、学习路线、精品文章均为原创或互联网收集,旨在提高网络安全技术水平为目的,只做技术研究,谨遵守国家相关法律法规,请勿用于违法用途。
网络安全自修室
2022/03/30
2K0
干货 | 一文了解文件包含漏洞
文件包含漏洞原理利用方式及修复
文件包含定义: 服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。造成方便的同时,也留下了隐患。
黑白天安全
2020/03/10
4.3K0
文件包含漏洞原理利用方式及修复
网络安全之文件包含漏洞就是这么简单
文件包含漏洞属于代码注入漏洞,为了减少重复代码的编写,引入了文件包含函数,通过文件包含函数将文件包含进来,直接使用包含文件的代码;简单来说就是一个文件里面包含另外一个或多个文件。
Java程序猿
2023/04/26
4920
文件包含漏洞-懒人安全
一.漏洞描述 文件包含漏洞主要是程序员把一些公用的代码写在一个单独的文件中,然后使用其他文件进行包含调用,如果需要包含的文件是使用硬编码的,那么一般是不会出现安全问题,但是有时可能不确定需要包含哪些具体文件,所以就会采用变量的形式来传递需要包含的文件,但是在使用包含文件的过程中,未对包含的变量进行检查及过滤,导致外部提交的恶意数据作为变量进入到了文件包含的过程中,从而导致提交的恶意数据被执行,主要用来绕过waf上传木马文件。 二.漏洞分类 0x01本地文件包含:可以包含本地文件,在条件
奶糖味的代言
2018/04/16
1.6K0
一文了解文件包含漏洞
例子_GET['filename']参数开发者没有经过严格的过滤,直接带入了include的函数攻击者可以修改_GET['filename']的值,执行非预期的操作
红客突击队
2022/09/29
1.6K0
一文了解文件包含漏洞
任意文件包含漏洞(1)
文件包含漏洞:即file inclusion 指当服务器开启allow_url_include选项时,就可以通过PHP的某些特性函数(include(),require()和include_once(),requir_once()),去包含任意文件。此时如果对文件来源不严格过滤审查,就容易包含恶意文件。而攻击者可以通过构造这个恶意文件来达到目的。
宸寰客
2020/08/25
1.3K0
任意文件包含漏洞(1)
cisp-pte学习笔记之文件包含
开发者在开发的过程中,会将可以重复利用的函数或者代码块写入到单个文件当中,当需要实现某些功能,直接调用对应功能的文件即可,无需重复编写,这种调用文件的过程称之为文件包含
cultureSun
2023/07/24
5000
渗透测试文件包含漏洞原理与验证(3)——PHP封装伪协议
PHP 有很多内置 URL 风格的封装协议,这类协议与fopen()、 copy()、 file_exists()和 filesize()的文件系统函数所提供的功能类似。
zhouzhou的奇妙编程
2024/11/12
1810
文件包含漏洞利用技术总结
开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这中文件调用的过程一般被称为文件包含。
黑战士
2024/04/15
2000
代码安全之文件包含
PHP文件包含漏洞的产生原因是在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,就可能导致意外的文件泄露甚至恶意的代码注入。
信安之路
2018/08/08
7130
代码安全之文件包含
2024全网最全面及最新且最为详细的网络安全技巧 九之文件包含漏洞典例分析POC;EXP以及 如何防御和修复[含PHP;Pyhton,C源码和CTF精题及WP详解](4)
这里我们可以介绍第一个trick,即利用phpinfo会打印上传缓存文件路径的特性,进行缓存文件包含达到getshell的目的。
盛透侧视攻城狮
2024/10/21
1890
2024全网最全面及最新且最为详细的网络安全技巧 九之文件包含漏洞典例分析POC;EXP以及 如何防御和修复[含PHP;Pyhton,C源码和CTF精题及WP详解](4)
文件包含漏洞(File Include)
由于在编写代码时避免麻烦就需要把公用的一段代码写到一个单独的文件里面,然后供其他文件需要时直接包含调用
偏有宸机
2020/11/04
2.1K0
CTF实战12 任意文件包含漏洞
该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关
用户1631416
2018/07/25
1.7K0
干货|超详细的常见漏洞原理笔记总结
sql注入是就是通过把SQL语句插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。
网络安全自修室
2022/12/06
2.1K0
干货|超详细的常见漏洞原理笔记总结
推荐阅读
相关推荐
【原创】基础篇--文件包含漏洞总结
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验