标签:定义 base64 opp efk set move 参考 gcd ade
概述
Scene
Transition
TransitionManager
常用API
1.4.1. AutoTransition
1.4.2. ChangeBounds
1.4.3. ChangeClipBounds
1.4.4. ChangeImageTransform
1.4.5. ChangeScroll
1.4.6. ChangeTransform
1.4.7. Explode
1.4.8. Fade
1.4.9. Slide
1.4.10. TransitionSet
1.4.11. PathMotion
1.4.12. 自定义Transition
Note
0
概述
Android 4.4.2 (API level 19)引入Transition框架,之后很多APP上都使用该框架做出很酷炫的效果,如 Google Play Newsstand app
还有github上很火的plaid
(https://github.com/nickbutcher/plaid)
在app中适当得使用上Transition能带来较好的用户体验,视频中介绍了该框架的基本使用以及其中核心的一些类和方法,只有学会这些基本的API才能在之后的Activity/Fragment过渡定制一些自己想要的效果。
先看官网的一张关系图
图中有三个核心的类,分别是Scene、Transition和TransitionManager,下面对这个三个核心类展开分析。
1
Scene
Scene场景,用于保存布局中所有View的属性值,创建Scene的方式可以通过getSceneForLayout方法
getSceneForLayout(ViewGroup sceneRoot, int layoutId, Context context)
比如:
也可以直接new Scene(ViewGroup sceneRoot, View layout)
两种方式都需要传SceneRoot,即该场景的根节点。
2
Transition
Transition过渡动画,前面创建了两个场景,分别保存了视图的一些属性,比如Visibility、position等,Transition就是对于这些属性值的改变定义过渡的效果。从上图可以看到系统内置了一些常用的Transition,Transition的创建可以通过加载xml,如:
res/transition/fade_transition.xml
然后在代码中:
或者直接在代码中:
3
TransitionManager
TransitionManeger用于将Scene和Transition联系起来,它提供了一系列的方法如setTransition(Scene fromScene, Scene toScene, Transition transition)指明起始场景和结束场景、他们的过渡动画是什么,go(Scene scene, Transition transition),到指定的场景所使用的过渡动画是什么,beginDelayedTransition(ViewGroup sceneRoot, Transition transition),在当前场景到下一帧的过渡效果是什么。比如这里使用go()方法,效果:
注意这里两个Scene中红绿两个方块除了位置和大小不一样,id是一致的,transition记录下两个Scene前后属性值,根据属性值的改变执行过渡动画,默认情况下对SceneRoot下的所有View执行动画效果,我们可以通过Transition.addTarget和removeTarget方法选择性添加或移除执行动画的View。
4
常用API
有时候我们只想改变当前已展示的视图层级中View的状态,可以通过beginDelayedTransition实现,下面列举系统内置的Transition的使用。
AutoTransition
AutoTransition默认的动画效果,对应xml tag为autoTransition
其实是以下几个动画组合顺序执行:
在代码中使用:
ChangeBounds
ChangeBounds对应xml tag为changeBounds,根据前后布局界限的变化执行动画。
ChangeClipBounds
ChangeClipBounds对应xml tag为changeClipBounds,作用对象:View的getClipBounds()值
ChangeImageTransform
对应xml tag为changeImageTransform,作用对象:ImageView的matrix
ChangeScroll
对应xml tag为changeScroll,作用对象:View的scroll属性值
ChangeTransform
对应xml tag 为changeTransform,作用对象:View的scale和rotation
Explode
对应xml tag为explode,作用对象:View的Visibility
Fade
对应xml tag为fade,作用对象:View的Visibility
可以在初始化是指定IN或者OUT分别对应淡入和淡出,若不指定默认为淡入淡出效果
Slide
对应xml tag为slide,作用对象:View的Visibility
TransitionSet
对应xml tag为transitionSet
可以在代码中创建transitionSet如:
也可以通过加载xml布局创建transitionSet:
xml布局长这样:
通过transitionOrdering属性设置动画执行的顺序,together表示同时执行,sequential表示顺序执行,在代码中可以调用TransitionSet的setOrdering(int)方法,属性值传ORDERING_SEQUENTIAL或者ORDERING_TOGETHER
在代码中:
这里结合changeImageTransform和changeTransform,效果如下:
PathMotion
Transition的辅助工具,以path的方式指定过渡效果,两个具体实现类ArcMotion和PatternPathMotion,看下ArcMotion的效果
它的运动轨迹是条曲线,有兴趣的可以研究下它的实现算法,在源码中有个很萌的图如下:
自定义Transition
除了系统内置的Transition,我们还可以自定义Transition效果,需要继承Transition
其工作原理是在captureStartValues和captureEndValues中分别记录View的属性值,官网建议确保属性值不冲突,属性值的命名格式参考:
package_name:transition_name:property_name
在createAnimator中创建动画,对比属性值的改变执行动画效果,如自定义修改颜色动画效果:
在两个Scene中使用自定义过渡动画,效果如下:
5
Note
Android 版本在4.0(API Level 14)到4.4.2(API Level 19)使用Android Support Library’s
对于 SurfaceView可能不起效果,因为SurfaceView的实例是在非UI线程更新的,因此会造成和其他视图动画不同步。
某些特定的转换类型在应用到TextureView时可能不会产生所需的动画效果。
继承自AdapterView的如ListView,与该框架不兼容。
不要对包含文本的视图的大小进行动画
标签:定义 base64 opp efk set move 参考 gcd ade
原文地址:http://www.cnblogs.com/gongxiaojiu/p/7591453.html