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

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

自定义转场可以创建自定义动画。比如,可以定义一种动画来更改文本的颜色或者将输入框的颜色置灰以表示不可用。

自定义转场与内置转场相同,都作用在View之上。不过与内置转场不同的是,还需要另外写一些代码来捕获转场过程的属性值,并生成相关动画。

这节课将会学习如何获取属性值,并生成相关动画。

继承Transition类

为了创建自定义转场,需要继承Transition,并重写以下方法:

public class CustomTransition extends Transition {@Overridepublic void captureStartValues(TransitionValues values) {}@Overridepublic void captureEndValues(TransitionValues values) {}@Overridepublic Animator createAnimator(ViewGroup sceneRoot,TransitionValues startValues,TransitionValues endValues) {}
}

下面的部分会学习如何重写这些方法。

获取View的属性值

转场动画使用了属性动画系统。属性动画通过更改View的属性实现了属性动画,所以转场框架需要使用属性的启动值与结束值来构造动画。

属性动画通常只会用到View的极少属性。比如,颜色动画需要颜色属性值,平移动画需要位置属性值。因为转场动画只需要某些特定的属性值,所以转场框架并没有将所有的属性值提供给转场动画。相反的,转场框架会调用回调方法以便允许转场动画获得需要的属性值,并将其存入框架中。

获得起始值

为了可以将起始的View值传给转场框架,需要实现captureStartValues(transitionValues)方法。转场框架会在每个View处于启动场景时调用该方法。这个方法的参数是一个TransitionValues对象,这个对象包含了View的引用及一个Map对象,你可以将View的属性值存放在这个Map对象中,然后这些值就会被传给转场框架。

为了确保所存储的属性值的键不会与其它TransitionValues的键相冲突,可以使用以下命名规则:
package_name:transition_name:property_name

下面的代码展示了captureStartValues()方法的实现:

public class CustomTransition extends Transition {// Define a key for storing a property value in// TransitionValues.values with the syntax// package_name:transition_class:property_name to avoid collisionsprivate static final String PROPNAME_BACKGROUND ="com.example.android.customtransition:CustomTransition:background";@Overridepublic void captureStartValues(TransitionValues transitionValues) {// Call the convenience method captureValuescaptureValues(transitionValues);}// For the view in transitionValues.view, get the values you// want and put them in transitionValues.valuesprivate void captureValues(TransitionValues transitionValues) {// Get a reference to the viewView view = transitionValues.view;// Store its background property in the values maptransitionValues.values.put(PROPNAME_BACKGROUND, view.getBackground());}...
}

获得结束值

转场框架会在每次场景结束时调用captureEndValues(TransitionValues)方法。至于其它方面,该方法内部的实现逻辑与获取开始值的逻辑一致。

下面的代码段展示了captureEndValues方法的实现:

@Override
public void captureEndValues(TransitionValues transitionValues) {captureValues(transitionValues);
}

在这个示例中,captureStartValues()方法与captureEndValues()方法都会调用captureValues()方法来获取值然后存储这些值。在captureValues()方法中获取View属性都相同,只是启动场景与结束场景获得的属性值不同。转场框架对起始场景与结束场景分别维护了各自的Map实例。

创建自定义Animator

为了使View在转场的时候可以以动画的方式变动,需要重写createAnimator()方法,并返回一个Animator对象。在转场框架调用这个方法时,会将变幻场景的根View与TransitionValues对象传回。启动TransitionValues对象包含了转场过程中所捕获的属性值。

createAnimator()方法的调用取决于启动场景与结束场景变换的过程。试着将淡入淡出动画想象为自定义转场动画。如果启动场景有5个target,而到了结束场景时被移除了两个,并且还添加了一个新的target,那么转场框架会调用createAnimator()方法6次:其中三个在启动场景与结束场景中都在出现,其中两个在转变到结束场景的过程中被移除了,最后一个在转换到结束场景时被添了进去。

对于在开始场景与结束场景中都存在的target View,转场框架会在调用createAnimator()方法时将TransitionValues对象通过startValues参数与endValues参数回传。对于只存在于单个场景的target View,转场框架会通过对应的参数将TransitionValues对象回传,而另一个参数则为空。

在实现createAnimator(ViewGroup, TransitionValues, TransitionValues)方法时,使用所捕获的属性值来创建一个Animator对象,并将其返回给转场框架。对于实现的示例,请参见CustomTransition示例中的ChangeColor类。有关更多属性动画的相关信息,请参见Property Animation。

使用自定义转场动画

自定义转场动画与内置转场动画的使用方式相同。同样可以通过转场管理者使用自定义转场动画,具体使用描述请参见Applying a Transition。

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

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

相关文章

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&…

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

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

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

知乎作者叶小飞:作为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 解释: 跳到最…

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

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

深度剖析开源分布式监控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. 题目 给定一个二叉树,它的每个结点都存放着一个整数值。 找出路径和等于给定数值的路径总数。 路径不需要从根节点开始,也不需要在叶子节点结束,但是路径方向必须是向下的(只能从父节点到子节点)。 二叉树不超过…

2020年美团技术团队最受欢迎的16篇技术文章

2020年美团技术团队最受欢迎的16篇技术文章:https://tech.meituan.com/2021/01/01/2020-summary.html

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

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

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

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

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

原文地址:http://android.xsoftlab.net/training/connect-devices-wirelessly/nsd-wifi-direct.html 本阶段的第一节课 Using Network Service Discovery 展示了如何搜索本地网络服务。然而,使用WI-FI P2P搜索服务可以直接搜索附近的设备,而…

全栈深度学习第2期: 开发套件与工具篇

一起追剧鸭简介Berkeley全栈深度学习追剧计划是由夕小瑶的卖萌屋发起的优质公开课打卡项目,通过微信群为同期追剧的小伙伴提供交流平台。关于该计划的详请见这里。1. Berkeley深度学习追剧群目前已有1000小伙伴加入,公众号后台回复口令 深度学习追剧 入群…

LeetCode 700. 二叉搜索树中的搜索

1. 题目 给定二叉搜索树(BST)的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在,则返回 NULL。 2. 解题 class Solution {//递归写法TreeNode *ans NULL; public:TreeNode* searchB…

NLP-美团技术团队(搜索-推荐-召回排序-Bert)

NLP-美团技术团队:https://tech.meituan.com/tags/nlp.html

iOS系统中导航栏的转场解决方案与最佳实践

背景 目前,开源社区和业界内已经存在一些 iOS 导航栏转场的解决方案,但对于历史包袱沉重的美团 App 而言,这些解决方案并不完美。有的方案不能满足复杂的页面跳转场景,有的方案迁移成本较大,为此我们提出了一套解决方案…