Android Transition 概念介绍及源码粗解

本文介绍了Android中的Transition框架,通过简单的代码实现复杂的视图动画效果。Transition包括scene root、scenes和Transition三个核心概念,通过记录并对比场景转换前后的状态来设置动画。文章详细阐述了转换过程,并提供了源码分析,为深入理解Android源码提供了一个切入点。
摘要由CSDN通过智能技术生成

之前在github上寻找Activity转场时偶然看到一个令人惊艳的项目:
Material-Animations(另有网友贡献了中文版本
其中的效果有很多,我们着重看看其中比较常见的效果。
如:同一个Layout内视图变化时的动画

scenes_anim.gif

之所以说惊艳,主要是因为像这么复杂的动画效果,居然通篇不见Animation,只用了几行代码就搞定,颇有一种四两拨千斤的感觉。

其实现方式就是今天的主角:Transition 。本文重说概念,先简单介绍Transition的使用,再尝试从源码角度去分析,一探究竟。

Android Master Transition 源代码目录- master分支
Android Master Transition 源代码目录- 4.3KitKat分支

demo的效果如果自己使用Animation实现的话,代码会极其冗杂,需要计算四个View在切换时的最终坐标,推算出其动画过程。(更不要说图中的动画还有旋转等。。)

而这些在Transition的面前,需要我们做的事情就少得多了:

ViewGroup sceneRoot = (ViewGroup) findViewById(R.id.scene_root);

(...)

scene1 = Scene.getSceneForLayout(sceneRoot, R.layout.activity_animations_scene1, this);
scene2 = Scene.getSceneForLayout(sceneRoot, R.layout.activity_animations_scene2, this);
scene3 = Scene.getSceneForLayout(sceneRoot, R.layout.activity_animations_scene3, this);
scene4 = Scene.getSceneForLayout(sceneRoot, R.layout.activity_animations_scene4, this);

(...)

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.button1:
            TransitionManager.go(scene1, new ChangeBounds());/*ChangeBound即为Transition一个子类*/
            break;
        case R.id.button2:
            TransitionManager.go(scene2, TransitionInflater.from(this).inflateTransition(R.transition.slide_and_changebounds));
            break;
        case R.id.button3:
            TransitionManager.go(scene3, TransitionInflater.from(this).inflateTransition(R.transition.slide_and_changebounds_sequential));
            break;
        case R.id.button4:
            TransitionManager.go(scene4, Transiti
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值