Android官方开发文档Training系列课程中文版:动画视图之转场框架介绍

原文地址:http://android.xsoftlab.net/training/transitions/index.html

引言

Activity所呈现的UI经常会由用户的输入或者其它事件而发生变化。比如,一个含有输入框的Activity,在用户输入要查找的关键字之后,这个输入框就会隐藏,并会在输入框的地方展示搜索后的结果。

为了可以在这样的情况下呈现出连贯的视觉效果,可以在不同View展示与隐藏过程中使用动画。这些动画可以为用户提供一种反馈,并会帮助他们学习应用是如何流转的。

Android提供了这种转场框架,它可以使开发者很容易的实现两个View之间动画转换效果。这个框架通过改变View的属性来实现动画效果。框架提供了一些常用的动画效果,并且还允许开发者创建自定义的动画效果及动画过程中的生命周期回调。

这节课将会学习如何使用内置的动画效果来作用两个View。这节课还囊括了如何创建自定义动画等知识。

Note: 在Android 4.0之后,Android 4.4.2之前的版本中,使用animateLayoutChanges属性来使动画作用布局。更多有关知识,请参见Property Animation及Animating Layout Changes.

转场框架

动画所能提供的不仅仅是视觉上的效果,它更多的作用是突出变化,并提供一些行为让用户在潜意识中学习程序是如何工作的。我们最常见的例子就是Activity在切换时候的动画,正常的切换动画可以让用户知道是进入了一个页面还是退出了一个页面。

为了帮助开发者可以学习View之间的动画,Android提供了转场框架。这个框架可以在View之间变化时一同作用一个或者一组动画。

转场框架拥有以下特性:

  • Group-level animations:可以同时作用一组动画效果。
  • Transition-based animation:动画的运行建立在View属性值从开始到结束之间数值变化的基础之上。
  • Built-in animations:为常见的效果提供内置的动画,比如淡入、淡出或者平移。
  • Resource file support:从布局资源文件中加载View层级及内置的动画。
  • Lifecycle callbacks:定义回调为动画作用的过程提供更为精细的控制力。

概述

转场框架可以作用于任何的View。这个View可以是单个的View对象,也可以是复合型的View容器,比如ViewGroup。转场框架通过改变View的属性来实现动画效果。

转场框架在View层级与动画的两条平行线之间工作。该框架的用途是存储View层级的状态,然后改变这些层级,再通过存储并应用动画定义来实现动画效果。

下图演示了View层级与框架对象和动画之间的关系:

转场框架提供了抽象的场景、转换及转换管理者。这些部分会在下面的部分详细介绍。如果要使用该框架,首先为View层级创建场景。接下来对View创建转换效果。为了能启动转场动画,需要使用一个 转换管理者来指明转换动画与结束场景。这个过程会在这节课的剩余课程中详细描述。

场景

场景保存了View层级的状态,包括所有的View及其属性值。一个View层级可以是一个单纯的View对象,亦或者是一个复合型的ViewGroup对象。将View的状态存储于场景中可以使这些状态从一个场景转换到另一个场景。场景框架提供了Scene类来表示一个场景。

转场框架可以从布局资源文件中创建场景或者从ViewGroup对象中创建场景。在代码中创建场景在两个地方会用到:一是动态生成View层级或者在运行时修改场景。

在很多情况下,并不需要专门去创建启动场景。如果已经采用了一种转换,那么转场框架会将上一个结束场景作为下一个转换的启动场景。如果还没有采用任何转换,那么框架会收集屏幕中当前状态下View的相关信息。

场景也可以定义自己的行为,这个行为会在场景改变的时候运行。比如,在场景转变完成之后可以利用这个特性来清理View的设置。除了View层级与其属性值之外,场景还可以存储View层级的父布局的引用。这个根View被称为scene root。改变场景与动画会引起scene root中场景的发生。

更多学习创建场景的知识,请参见Creating a Scene。

转场

在转场框架中,动画会创建一系列帧,这些帧描述了View层级从开始到结束场景过程中的每一项细节变化。动画的有关信息被存在一个名为Transition的对象中。如果要运行动画,则需要使用TransitionManager对象。转场框架会在两个不同的场景中转换或在当前的场景中转换不同的状态。

转场框架包含了一系列内置转场,这主要被用于通用动画效果。比如淡入淡出、调整View尺寸。你也可以使用动画框架所提供的API来定义自定义场景来创建独有的动画效果。转场框架还可以使开发者整合不同的动画效果到一个集合中,这个集合可以包含内置的动画效果或者自定义的动画效果。

转场的生命周期与Activity的生命周期极为类似,这代表了动画执行过程中的每一个转换状态。在重要的生命周期状态下,转场框架会调用这些回调方法,这可以使开发者在转场的过程中适时调整用户界面。

有关更多转场的相关知识,请参见Applying a Transition及Creating Custom Transitions。

转场的局限性

这部分列出了一些转场框架已知的不足:

  • 动画作用到SurfaceView上可能不会正常显示。因为SurfaceView对象由非UI线程更新,所以这个更新可能不会与其它View的动画保持一致。
  • 当在TextureView上使用动画时,可能某些特殊的转场类型不会产生预想中效果。
  • 继承于AdapterView的类,比如ListView,它们管理子View的方式与转场框架互不兼容。如果视图作用动画于AdapterView等之上,那么设备界面可能会假死。
  • 如果想使调整尺寸动画作用于TextView上,那么TextView上的文本会在动画完成之前被绘制到一个新的位置。为了避免这个问题,请不要将调整尺寸的动画作用在包含文本的View上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/479072.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习竞赛中,为什么GBDT往往比深度学习更有效?

在过去的几年里,大多数的推荐算法都是基于深度学习(DL)方法。遵循我们领域的一般研究实践,这些工作证明了新的DL方法在离线实验中优于其他不基于深度学习的模型。然而,在与推荐相关的机器学习竞赛中(如与年…

2020年算法工程师技术路线图

原文链接:https://cloud.tencent.com/developer/article/1689082 重磅干货,第一时间送达作者丨字节知乎来源丨https://zhuanlan.zhihu.com/p/192633890极市导读算法工程师如何获得技术方面的成长?本文从工程基础、算法基础、算法工程交叉、工…

浅谈大型互联网企业入侵检测及防护策略

前言 如何知道自己所在的企业是否被入侵了?是没人来“黑”,还是因自身感知能力不足,暂时还无法发现?其实,入侵检测是每一个大型互联网企业都要面对的严峻挑战。价值越高的公司,面临入侵的威胁也越大&#x…

征稿 | Big Data Research 专刊(影响因子 2.95)

征稿截止:2020年06月15日近年来,学术界和工业界领域都相继构建和发布了越来越多的大规模知识图谱,如DBpedia、YAGO、Freebase、Wikidata、Google knowledge Graph、Microsoft Satori、Facebook Entity Graph等。事实上,来自不同领…

不要再问Python了!

很多小伙伴问如何学习Python,哪里可以找到实战的Python项目,有没有爬虫案例等等。今天给大家分享一份我整理的Python大全学习资料(文末有获取方式)。话不多说,直接上干货。首先,全部资料目录压缩简单看下里…

CAT 3.0 开源发布,支持多语言客户端及多项性能提升

项目背景 CAT(Central Application Tracking),是美团点评基于 Java 开发的一套开源的分布式实时监控系统。美团点评基础架构部希望在基础存储、高性能通信、大规模在线访问、服务治理、实时监控、容器化及集群智能调度等领域提供业界领先的、…

论文浅尝 - TACL2020 | TYDI QA:Google 发表一个多语言的问答语料库

论文笔记整理:吴林娟,天津大学硕士。链接:https://arxiv.org/ftp/arxiv/papers/2003/2003.05002.pdf动机具有挑战性、值得信赖的评估数据可以促进多语言模型的发展,为了鼓励对多语言问答技术的研究,作者提出了数据集Ty…

读博总结的总结:读博的那些事儿

文 | 胡津铭知乎本文已获作者授权,禁止二次转载我时常给同学们推荐各种我看过的优质读博总结与建议文章,今天有了些空,整理一下我看过的优质文章。排名不分先后,想到啥写啥。先推荐英文的资源好了,因为我最推荐的一篇文…

LeetCode 55. 跳跃游戏(贪心)

1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1:输入: [2,3,1,1,4] 输出: true 解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。 示例…

论文浅尝 - ICLR2020 | Abductive Commonsense Reasoning

论文笔记整理:毕祯,浙江大学硕士,研究方向:知识图谱、自然语言处理。链接:https://arxiv.org/pdf/1908.05739.pdf动机尽管长期以来人们一直认为归因是人们在自然语言界线之间进行解释和阅读的核心,但很少有…

【基本功】深入剖析Swift性能优化

简介 2014年,苹果公司在WWDC上发布Swift这一新的编程语言。经过几年的发展,Swift已经成为iOS开发语言的“中流砥柱”,Swift提供了非常灵活的高级别特性,例如协议、闭包、泛型等,并且Swift还进一步开发了强大的SIL&…

新年立个小目标!代码写得更规范!

知乎作者叶小飞:作为Oppo Reno2 超级夜景核心开发人员和奔驰San Jos Pilot落地工程师之一,我写代码基本尽可能地遵循Google Style. 在这里写几个自己的习惯Google Style里面几个常用的要点。自己的习惯动手写代码前尽量做到胸中有丘壑。现在这世界讲究格局&#xff…

手把手教你用Keras实现英文到中文机器翻译 seq2seq+LSTM

原文链接:https://blog.csdn.net/qq_44635691/article/details/106919244 该模型实现的是英文到中文的翻译,下图为了更好展示模型架构借用大佬的图(这里没有用到Embeddings): 本文完整代码:Github 目录 一、处理文本数据 1.获得翻译前后的句子…

LeetCode 45. 跳跃游戏 II(贪心/BFS,难)

文章目录1. 题目2. 解题2.1 贪心2.2 BFS1. 题目 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 示例:输入: [2,3,1,1,4] 输出: 2 解释: 跳到最…

深度剖析开源分布式监控CAT

CAT(Central Application Tracking)是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,基本接入了美团上海侧所有核心应用。目前在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用&#xff0c…

论文浅尝 | ​ADRL:一个基于注意力机制的知识图谱深度强化学习框架

论文笔记整理:谭亦鸣,东南大学博士。来源:Knowledge-Based Systems 197 (2020) 105910链接:https://www.sciencedirect.com/science/article/abs/pii/S0957417419306839概要与动机知识图谱推理是图谱构建的关键技术之一&#xff0…

新年第二弹|卖萌屋私藏书单大公开

夕本尊 &夕小瑶 推荐作为一个互联网人,不仅要懂技术,还应该了解行业的基本运作原理。这其中一个重要的问题是:为什么互联网产品(基本)都是免费的,甚至纷纷给用户送钱,它们却能有这么强的盈利…

LeetCode 437. 路径总和 III(双重递归)

1. 题目 给定一个二叉树,它的每个结点都存放着一个整数值。 找出路径和等于给定数值的路径总数。 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 二叉树不超过…

论文浅尝 - ESWA | 知识图谱的自动扩充方法

论文笔记整理:谭亦鸣,东南大学博士。来源:ESWA141(2020)链接:https://www.sciencedirect.com/science/article/abs/pii/S0957417419306839为了使计算机理解人类语言,并且实现推理,人类知识需要被表示并储存…

美团大脑:知识图谱的建模方法及其应用

作为人工智能时代最重要的知识表示方式之一,知识图谱能够打破不同场景下的数据隔离,为搜索、推荐、问答、解释与决策等应用提供基础支撑。美团大脑围绕吃喝玩乐等多种场景,构建了生活娱乐领域超大规模的知识图谱,为用户和商家建立…