原文地址: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上。

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

  1. Android官方开发文档Training系列课程中文版:目录

    原文地址 : http://android.xsoftlab.net/training/index.html 引言 在翻译了一篇安卓的官方文档之后,我觉得应该做一件事情,就是把安卓的整篇训练课程全部翻 ...

  2. Android官方开发文档Training系列课程中文版:创建自定义View之View的创建

    原文地址:http://android.xsoftlab.net/training/custom-views/index.html 引言 Android框架含有大量的View类,这些类用来显示各式各样 ...

  3. Android官方开发文档Training系列课程中文版:OpenGL绘图之图形绘制

    原文地址:http://android.xsoftlab.net/training/graphics/opengl/draw.html 如果你还不清楚如何定义图形及坐标系统,请移步:Android官方 ...

  4. Android官方开发文档Training系列课程中文版:使用Fragment构建动态UI之Fragment创建

    原文地址:http://android.xsoftlab.net/training/basics/fragments/index.html 导言 为了在Android中创建动态的多面板用户界面,你需要 ...

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

    原文链接:http://android.xsoftlab.net/training/transitions/transitions.html 在转场框架中,动画是由一帧帧的图像连续绘制形成的,这一帧帧 ...

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

    原文地址:http://android.xsoftlab.net/training/transitions/custom-transitions.html 自定义转场可以创建自定义动画.比如,可以定义 ...

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

    原文地址:http://android.xsoftlab.net/training/transitions/scenes.html 场景存储了View层级的状态,包含所有的View及View的属性.转 ...

  8. Android官方开发文档Training系列课程中文版:打印内容之图像打印

    原文地址:http://android.xsoftlab.net/training/printing/index.html 引言 Android用户会很频繁的浏览设备上的内容,但是有部分情况例外,当屏 ...

  9. Android官方开发文档Training系列课程中文版:分享文件之配置文件共享

    原文地址:http://android.xsoftlab.net/training/secure-file-sharing/index.html 导言 APP经常需要给其它的APP提供一个或多个文件. ...

最新文章

  1. Piwik学习 -- 插件开发
  2. AngularJS之禅
  3. 【Android 内存优化】使用 Memory Analyzer ( MAT ) 工具分析内存 ( MAT 工具使用 | 最大对象 | 类实例个数 | 引用与被引用 | GC Roots 最短链 )
  4. QLable显示图片 和 QLabel自适应 QLabel 文字居中
  5. 一个文件夹就是一个信息系统
  6. 函数作用域导致的问题
  7. python产品发布会_【Mac系统 + Python + Django】之开发一个发布会系统【Django模型(三)】...
  8. MySql PreparedStatement用法 及 Transaction处理
  9. 微信上了一个新功能,吐槽的人有点多
  10. 怎么避免后台被搜索_优化亚马逊后台关键词的6个技巧,让买家快速找到你
  11. [CareerCup] 17.3 Factorial Trailing Zeros 求阶乘末尾零的个数
  12. 502php,php502是什么问题
  13. 使用 Php Artisan Tinker 来调试你的 Laravel 时间 2016-06-19 22:58:13 Laravel学院 原文 http://laravelacademy.org/
  14. KiB、MiB与KB、MB的区别
  15. ArangoDB高级查询(一)
  16. 在线pdf转换成word文档的方法
  17. 如何启用计算机上的摄像头,电脑如何打开摄像头
  18. B站弹幕姬()分析与开发(上篇)
  19. 希捷移动硬盘Backup Plus Portable初始化及加密
  20. 数据分析师培训机构告诉你,如何成为优秀的数据分析师

热门文章

  1. 嵌入式的薪资还是挺低的
  2. Windows环境下的安装gcc
  3. mysql set语句_mysql--乱码解决(6)
  4. 【Pytorch神经网络理论篇】 05 Module类的使用方法+参数Parameters类+定义训练模型的步骤与方法
  5. 十七、MySQL触发器(创建、删除、查看)详解
  6. LeetCode 163. 缺失的区间
  7. LeetCode 863. 二叉树中所有距离为 K 的结点(公共祖先/ DFS+BFS)
  8. LeetCode 1333. 餐厅过滤器(Lambda排序)
  9. LeetCode 797. 所有可能的路径(DFS)
  10. python--从入门到实践--chapter 11 代码测试unittest