Scenes and Transitions(1)——转换框架

给你的用户界面添加动画提供了比静态界面更多的信息。动画强调了发生的改变,并且提供了帮助用户了解你的应用如何工作的视觉线索。

为了帮助你在一个view hierarchy和另一个之间执行动画,Android提供了转换框架。这个框架对不同hierarchies中的所有view应用动画,使得看起来好像从一个hierarchy变换到了另外一个。

这个框架有以下功能:
1. 分组动画:使得一个view hierarchy种的所有views可以执行一个或多个动画效果。
2. 转换动画:基于开始和结束的view的属性值来执行动画。
3. 内置动画:对常用的效果有内置动画,比如逐渐变淡或者移动
4. 资源文件支持:从layout resource files中加载view hierarchies和内置动画。
5. 声明周期回调:定义了生命周期回调来控制动画和heirarchy改变的过程。

点此查看动画效果视频

上述视频fades out old views and fades in new views
这个动画是使用转换框架的一个例子。转换框架对两个view hierarchy的所有view执行了动画。一个view hierarchy可以简单成一个view也可以复杂成一个含有一个tree of views的ViewGroup。这个框架通过改变一个或多个属性来实现从一个view hierarchy动画转换到另外一个view hierarchy。

转换框架和view hierarchies和animations并行工作。原理是这个框架存储view hierarchies的状态,从一个hierarchy变换到另外一个来改变设备屏幕的显示,通过保存和应用动画定义来进行动画转换。

下图说明了view hierarchies,framework objects,animations之间的关系。

图2 转换框架的关系

转换框架提供了对场景,转换,转换管理者的抽象。这些会在下面的部分仔细描述。为了使用这个框架,你创造了一个准备使用转换的场景。然后,你为每一个想要使用的动画创建一个transition。为了开始转换,你使用一个transition manager来指定一个transition并结束这个场景。这个过程会在下面详细叙述。

一个scene保存了一个view hierarchy的状态,包括它所有的子views和他们的属性。一个view hierarchy可以简单到一个view也可以复杂到一个views tree。在一个scene中保存view hierarchy的状态使得你可以从另外一个场景转换到这个状态。这个框架提供了Scene类来表示一个场景。

转换框架允许你从layout resource files或者ViewGroup对象创建场景。如果你动态创建了一个view hierarchy或者动态修改它的时候,创建一个场景非常有用。

在大多数情况下,你不会显式的创建开始场景。如果你使用了一个transition,框架使用先前的最终场景来作为任何之后转换的开始场景。如果你没有应用transition,这个框架收集当前屏幕所有views的状态信息。

一个场景也可以在场景改变的时候定义它自己的操作。举例而言,这个功能在你转换到一个场景之后需要清除view的设置的时候非常有效。

作为view hierarchy和自己的属性值的补充,一个场景也保存一个父view hierarchy的引用。这个root view被叫做scene root。对场景的改变或者影响场景的动画在scene root中发生。

学习怎样创建场景,参考Creating a Scene

在转换框架中,动画产生了一系列画面来描画从开始场景到结束场景中的view hierarchy改变。动画的信息被保存在Transition对象中。为了播放动画,你使用一个TransitionManager实例来使用转换。这个框架可以对两个不同的场景转换或者对同一个场景的不同状态来转换。

这个框架包含了常用动画效果的内置的转换,比如变亮变淡和改变view的尺寸。你也可以使用animation framework中的API来创建一个动画效果,进行自定义转换。转换框架也允许你将不同的动画效果结合到一个转换集合中。

转换的生命周期和activity生命周期类似,它代表了不同的转换状态。在重要的生命周期状态,框架会调用生命周期回调,让你可以在不同的转换节点来调整你的用户界面。

学习更多于transitions相关的内容,参考Applying a TransitionCreating Custom Transitions

下面列出一些transitions framework的已知限制:
1. 应用到SurfaceView的动画可能不会正确显示。SurfaceView实例在非UI线程中更新,所以这个更新可能会和其他的views不同步。
2. 在应用到TextureView上的时候,有一些特定的转换类型可能不会产生想要的动画效果。
3. 继承了AdapterView的类,比如ListView,和transitions framework不兼容。如果你试图对一个AdapterView执行动画,设备的显示可能会挂起。
4. 如果你试图用动画给TextView重新设置大小,文字会在TextView对象完全转换之前先跑到新的位置。为了避免这个问题,不要在包含文字的view里面通过动画给views重新设置大小。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值