Android官方开发文档Training系列课程中文版:动画视图之场景创建

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

场景存储了View层级的状态,包含所有的View及View的属性。转场框架在启动场景与结束场景之间运行动画。启动场景通常由当前的UI状态自动决定。对于结束场景,转场框架提供了两种实现方式:从布局资源文件中创建场景或从代码中创建场景。

这节课主要学习如何创建场景及如何定义场景行为。下节课则主要学习如何在两个场景之间转换。

Note: 转场框架可以不使用场景来使动画作用单个View层级,就像Apply a Transition Without Scenes中描述的。无论如何,了解这节课有助于懂得转换的基本工作原理。

由布局资源创建场景

开发者可以直接从布局资源文件中创建场景实例。当View层级几乎是静止状态时可以使用这项技术。创建好的场景代表了View层级的状态。一旦View层级发生变化,则需要重新床架场景。转场框架会由资源文件中的整个View层级创建场景,因此不能由资源文件的部分层级创建场景。

为了可以从布局资源文件中创建场景,则需要从布局中接收场景容器,一般是一个ViewGroup实例,然后再调用Scene.getSceneForLayout()方法,这个方法需要传入场景容器以及包含场景布局资源文件的ID。

为场景定义布局

下面的代码段展示了如何为一个场景容器元素创建两个不同的场景。代码段还展示了开发者可以加载多个不相关的场景,不过这并不意味着每个场景之间不无关系。

示例结构由以下布局定义构成:

  • 主布局包含一个文本控件和一个容器控件。
  • 第一个场景的相关布局包含两个文本控件。
  • 第二个场景的相关布局同样包含两个文本控件,但是两个控件的顺序是颠倒的。

示例被设计为在Activity的主布局的子布局之间进行动画。主布局的文本控件则会保持静止。

Activity的主布局定义如下:

res/layout/activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/master_layout"><TextView
        android:id="@+id/title"...android:text="Title"/><FrameLayout
        android:id="@+id/scene_root"><include layout="@layout/a_scene" /></FrameLayout>
</LinearLayout>

这个布局定义包含了一个文本控件及场景容器的子布局控件。第一个场景的布局被包含在主布局之内。这意味着第一个场景布局会被作为初始化UI的一部分,还可以被加载到一个场景中,因为转场框架只能加载一整个布局文件。

第一个场景的布局文件如下:

res/layout/a_scene.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/scene_container"android:layout_width="match_parent"android:layout_height="match_parent" ><TextView
        android:id="@+id/text_view1android:text="Text Line 1" /><TextView
        android:id="@+id/text_view2android:text="Text Line 2" />
</RelativeLayout>

第二个场景同样包含了两个文本控件,只是它们的顺序发生了颠倒,该布局定义如下:

res/layout/another_scene.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/scene_container"android:layout_width="match_parent"android:layout_height="match_parent" ><TextView
        android:id="@+id/text_view2android:text="Text Line 2" /><TextView
        android:id="@+id/text_view1android:text="Text Line 1" />
</RelativeLayout>

从布局中生成场景

在定义了两个场景布局文件之后,则可以开始操作它们了。这可以使开发者在两个UI配置之间延迟转场。为了可以操作一个场景,则需要先获得场景容器的引用及布局资源的ID。

下面的代码段展示了如何获得场景容器的引用及从布局文件中创建两个Scene对象:

Scene mAScene;
Scene mAnotherScene;
// Create the scene root for the scenes in this app
mSceneRoot = (ViewGroup) findViewById(R.id.scene_root);
// Create the scenes
mAScene = Scene.getSceneForLayout(mSceneRoot, R.layout.a_scene, this);
mAnotherScene =Scene.getSceneForLayout(mSceneRoot, R.layout.another_scene, this);

现在在应用中有了两个Scene对象。每个Scene都会使用到场景容器。

在代码中创建场景

开发者还可以在代码中创建Scene对象。当开发者需要直接修改View层级或者动态生成View层级就可以使用这项技术。

为了可以在代码中创建场景。需要使用Scene(sceneRoot, viewHierarchy)构造方法。调用这个构造方法等同于调用Scene.getSceneForLayout()方法。只是该构造方法需要预先加载布局文件。

下面的代码段演示了如何在代码中由场景容器元素及场景的View层级创建一个Scene实例:

Scene mScene;
// Obtain the scene root element
mSceneRoot = (ViewGroup) mSomeLayoutElement;
// Obtain the view hierarchy to add as a child of
// the scene root when this scene is entered
mViewHierarchy = (ViewGroup) someOtherLayoutElement;
// Create a scene
mScene = new Scene(mSceneRoot, mViewHierarchy);

创建场景行为

转场框架还可以使开发者定义转场开始或者结束的行为。在很多情况下,自定义转场行为并不是必须的,因为转场框架会在场景之间自动改变动画。

转场行为有助于处理以下情况:

  • 作用动画的View处于不同的层级。开发者可以在场景启动及结束的时候使用退出或者进入场景的行为。
  • 转场框架不能够自动的作用View的动画,比如ListView,更多相关信息,请参见Limitations.

如果要定义自定义行为,需要将行为作为Runnable对象传入到Scene.setExitAction()方法或Scene.setEnterAction()方法。转场框架会在运行转场动画之前调用Scene.setExitAction()方法,会在转场动画结束之后调用Scene.setEnterAction()方法。

Note: 不要使用场景行为在启动场景与结束场景的View之间传递数据。更多相关信息,请参见Defining Transition Lifecycle Callbacks.

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

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

相关文章

不要再问Python了!

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

GCN】在NLP中应用GCN的几种构图方法整理

GCN】在NLP中应用GCN的几种构图方法整理&#xff1a;https://blog.csdn.net/qq_27590277/article/details/106264292

Android官方开发文档Training系列课程中文版:动画视图之应用场景

原文链接&#xff1a;http://android.xsoftlab.net/training/transitions/transitions.html 在转场框架中&#xff0c;动画是由一帧帧的图像连续绘制形成的&#xff0c;这一帧帧的图像描述了启动场景到结束场景的整个过程。转场框架将这些动画作为一个转场对象,这个对象包含了…

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

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

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

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

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

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

NLP事件抽取综述(上中下):中文事件抽取、开放域事件抽取、事件数据生成、跨语言事件抽取、小样本事件抽取、零样本事件抽取等类型

https://github.com/xiaoqian19940510/Event-Extraction 近年来事件抽取方法总结&#xff0c;包括中文事件抽取、开放域事件抽取、事件数据生成、跨语言事件抽取、小样本事件抽取、零样本事件抽取等类型 NLP事件抽取综述下&#xff1a;

Android官方开发文档Training系列课程中文版:动画视图之创建自定义转场动画

原文地址&#xff1a;http://android.xsoftlab.net/training/transitions/custom-transitions.html 自定义转场可以创建自定义动画。比如&#xff0c;可以定义一种动画来更改文本的颜色或者将输入框的颜色置灰以表示不可用。 自定义转场与内置转场相同&#xff0c;都作用在Vi…

LeetCode 55. 跳跃游戏(贪心)

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

论文浅尝 - ICLR2020 | Abductive Commonsense Reasoning

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

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

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

Android官方开发文档Training系列课程中文版:连接无线设备之网络服务搜索功能

原文地址&#xff1a;http://android.xsoftlab.net/training/connect-devices-wirelessly/index.html 引言 Android设备除了可以与服务器建立连接之外&#xff0c;Android无线API还允许处于同一网段下的两台设备建立连接&#xff0c;或者是物理距离相近的两台设备建立连接。N…

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

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

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

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

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

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

Android官方开发文档Training系列课程中文版:连接无线设备之通过WIFI创建P2P连接

原文地址&#xff1a;http://android.xsoftlab.net/training/connect-devices-wirelessly/wifi-direct.html#permissions Wi-Fi peer-to-peer (P2P) APIs可以使程序与附近的设备进行直接通讯&#xff0c;Android的Wi-Fi P2P框架由Wi-Fi Direct™提供技术支持。WI-FI P2P技术可…

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

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

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

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

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

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

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

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