过渡动画Transition

Transition过渡动画

顾名思义

比如一个当前屏幕状态(Scene)中一个正方形长50dp,切换到另一个屏幕状态(Scene)对应正方形长度长100dp,长度变化就是渐变的,有过渡的,而不是突然地


先看Transition相关类

Scene     屏幕状态类,包含了当前屏幕的信息,包括控件的大小,位置,颜色背景

如何获得

Scene scene1 =Scene.getSceneForLayout(SceneRoot,R.layout.transition_scene1,this);第一个参数是Scene界定的区域,是一个(View)ViewGroup,第二个就是布局,跟平时的main.xml没有什么不同,也是定义了几个控件和他们的相关信息,换了名字而已不要被迷惑

 

TransitionManager   Transtion管理者选定当从屏幕状态A切换到屏幕状态B所使用的过渡动画,可以在xml定义好几组呢

建议从xml中定义,在代码中初始化

Layout/

R.anim.transitions_mgr

<transitionManager xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <transition app:fromScene="@layout/transition_scene1"
        app:toScene="@layout/transition_scene2"
        app:transition="@anim/changebounds"/>
    <transition app:fromScene="@layout/transition_scene2"
        app:toScene="@layout/transition_scene1"
        app:transition="@anim/changebounds"/>
    <transition app:toScene="@layout/transition_scene3"
        app:transition="@anim/changebounds_fadein_together"/>
    <transition app:fromScene="@layout/transition_scene3"
        app:toScene="@layout/transition_scene1"
        app:transition="@anim/changebounds_fadeout_sequential"/>
    <transition app:fromScene="@layout/transition_scene3"
        app:toScene="@layout/transition_scene2"
        app:transition="@anim/changebounds_fadeout_sequential"/>
</transitionManager>
这里定义了五组Scene变化,从scene1到scene2,从scene2到scene1,从任意到scene3,从scene3到scene1,从scene3到scene2,
者五个屏幕变化用了数个不同的过渡动画,过渡动画不同,过渡的样子不同
如果在Activity中代码切换了从scene1到scene2,那么就会调用changebounds这个过渡动画进行过渡
TransitionInflater 能够从xml把TransitionManager从生成出来
TransitionInflater inflater=TransitionInflater.from(MainActivity.this);//获取实例
mTransitionManager = inflater.inflateTransitionManager(R.anim.transitions_mgr,
        mSceneRoot);  /**第一个参数就是TransitionManager的xml形式,第二个参数就是动画所发生的ViewGroup位置,
毕竟变化是有范围的,**/
如何变化??
TransitionManager.transitionTo(Scene2),先假设从scene1到scene2吧,这样根据TransitionManager中的组,
启用changebounds这个过渡动画,注意这个方法传入了新的scene,与下面的不同
changebounds.xml
<?xml version="1.0" encoding="utf-8"?>


<changeBounds/>
是的就是这么一点,改变目标视图属性,
changebounds_fadein_together.xml
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <changeBounds/>
    <fade app:fadingMode="fade_in" >
        <targets>
            <target app:targetId="@id/grayscaleContainer" />
        </targets>
    </fade>
</transitionSet>
这个也没什么复杂,根属性是一个TransitionSet意义为过渡动画集,定义了一个changebounds和一个fade_in(淡入动画),且该淡入动画目标id是
grayscaleContainer,说明这个新来的屏幕状态比上一个多点东西啊,需要淡入动画来展现
TransitionManager.beginDelayedTransition(sceneRoot,transition)
调用这个方法说明变化的东西不是很复杂,这个方法先回捕获当前屏幕状态值,等你改变控件的参数后比如大小,再捕获一次当前屏幕状态值
,然后用动画来过渡这种变化,第二个参数可以为null,表示调用默认的过渡动画AutoTransition,这无关竟要啦.
重要的是,他没有传入一个新的scene,适用于没传入新的scene

建议定义一个初始布局有按钮和普通的view带大小和颜色,按钮用于切换scene,然后定义一个布局有按钮和普通的view带大小和颜色,这两个布局
对应的控件id相同,但属性不同,按钮就是切换scene功能,获取这两个布局对应的scene1,scene2,
显然需要在manager中定义两组动画,两组动画都是changebounds吧,就能看到渐变了,注意可以制定viewgroup不把按钮包括进去
参考博客:


http://blog.csdn.net/Mycroft_Wong/article/details/51790960





 
 
 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值