转场动画Scene transition

场景动画用于布局的某个子布局由一种场景布局变化为另一种场景布局时调用的动画

scene:保存视图层状态,包括所有子视图的属性值(可以通过xml 文件创建,也可以通过ViewGroop来动态加载)

transition:使用动画的方式来描绘从fromScene到toScene所经历的变化,通过transitionManager对象来实现不同scene之间的切换


  • 1.创建场景

先在r/layout/下新建一个xml 文件,将场景的布局文件先定义好R.layout.scene1;

Scene mScene1 = Scene.getSceneForLayout(mSceneRoot, R.layout.scene1, this);//mSceneRoot为inClude场景的父容器(ViewGroup) 
  • 2.创建过渡动画transition
    在res/下新建transition子目录,在res/transition/目录下新建xml文件,
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
              android:transitionOrdering="sequential">//顺序可以是sequential或者是together
<!--transitionSet为transition的集合,可包含多个transition,也可以下面单个transition作为根节点-->

    <!--捕捉前后场景中目标窗体控件的位置和布局边界的变化-->
    <changeBounds/>
    <changeImageTransform/>//捕捉前后场景中目标窗体控件的显示矩阵(matrix)的变化
    <changeTransform/>//捕捉前后场景中目标窗体控件的缩放(scale)和旋转(rotation)变化
    <explode/>//可见目标窗体控件,从父窗体的四周边缘移入或移除的过渡动画
    <fade/>//可见目标窗体控件,淡入淡出的过渡动画;
    <!--目标窗体控件,从父窗体的某一边缘移入或移除的过渡动画-->
    <slide
        android:slideEdge="right" //移入移除的边缘
        android:duration="500"
        android:interpolator="@android:interpolator/accelerate_decelerate">
        <targets> //目标窗体
            <target android:targetId="@id/viewGroup"/>
        </targets>
    </slide>
</transitionSet>
  • 3.通过TransitionManager控制场景和场景动画的切换
    在xml中定义transitionManager res/transition/下新建xml
<?xml version="1.0" encoding="utf-8"?>
<transitionManager xmlns:android="http://schemas.android.com/apk/res/android">

    <!--从场景1到场景2的过渡动画-->
    <transition android:fromScene="@layout/scene1"
                android:toScene="@layout/scene2"
                android:transition="@transition/transition1"/>

   <!--从场景2到场景1的过渡动画-->
    <transition android:fromScene="@layout/scene2"
                android:toScene="@layout/scene1"
                android:transition="@transition/transition1"/>

</transitionManager>

在代码中实例化xml中定义的transitionManager

TransitionInflater inflater = TransitionInflater.from(this);//获得transitionInflater对象
TransitionManager transitionManager=inflater.inflateTransitionManager(R.transition.my_tmanager, sceneRoot);//通过inflater将XML中定义的transitionManager实例化

实现场景的切换

transitionManager.transitionTo(scene2);//将当前场景切换到scene2 transitionManager会自动调用从scene1到scene2的动画
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值