Android动画:Transition

来源:互联网 发布:如何修改淘宝账户名称 编辑:程序博客网 时间:2024/05/21 15:07

scene:场景,transition:转换。

BasicTransition

getSceneForLayout()+TransitionManager.go(scene3)+new Scene()需要API>=19

demo中共有3个scene,分别是scene1、scene2、scene3,对应的xml分别是scene1.xml、scene2.xml、scene3.xml,scene本身的根布局的id都是一样的,这里是container;

效果图

这里写图片描述

scene_root:

存放scene的布局

<LinearLayout>    ....    <FrameLayout        android:id="@+id/scene_root"        android:layout_width="match_parent"        android:layout_height="match_parent">        <include layout="@layout/scene0"/>    </FrameLayout></LinearLayout>

scene1.xml

scene本身的根布局的id都是一样的,这里是container;

<?xml version="1.0" encoding="utf-8"?><RelativeLayout    android:id="@+id/container"    xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:orientation="vertical">    <View        android:id="@+id/view1"        android:layout_width="100dp"        android:layout_height="100dp"        android:layout_alignParentBottom="true"        android:background="@color/colorAccent"/>    <View        android:id="@+id/view2"        android:layout_width="100dp"        android:layout_height="100dp"        android:layout_alignParentBottom="true"        android:layout_alignParentEnd="true"        android:background="@color/colorPrimary"/>    <View        android:id="@+id/view3"        android:layout_width="100dp"        android:layout_height="100dp"        android:layout_centerHorizontal="true"        android:background="@color/color1"/></RelativeLayout>

创建scene的2种方法

第一种:试了下new Scene()无效果

Scene scene1 = new Scene(scene_root, container)scene_root:存放scene的布局container:scene本身的根布局

第二种:

Scene scene1 = Scene.getSceneForLayout(scene_root, R.layout.scene1, context);第一个参数:存放scene的布局第二个参数:scene第三个参数:context

变换scene

//第一种:TransitionManager.go(scene1);//第2种:TransitionManager transitionManager = new TransitionManager();transitionManager.transitionTo(scene3)

步骤

  1. 创建scene
  2. 转换scene

对应的方法分别是:

Scene scene1 = Scene.getSceneForLayout(scene_root, R.layout.scene1, context);TransitionManager.go(scene1);

自定义TransitionManager

TransitionInflater transitionInflater = TransitionInflater.from(context);TransitionManager transitionManager = transitionInflater.inflateTransitionManager(R.transition.custom_transition_manager, scene_root);

custom_transition_manager.xml是放在res/transition文件夹中

<?xml version="1.0" encoding="utf-8"?><transitionManager xmlns:android="http://schemas.android.com/apk/res/android">    <transition android:toScene="@layout/scene3"                android:transition="@transition/changebounds_fadein_transition"/></transitionManager>

其中changebounds_fadein_transition.xml也是放在value/transition文件夹中

<?xml version="1.0" encoding="utf-8"?><transitionSet xmlns:android="http://schemas.android.com/apk/res/android">    <changeBounds/>    <fade android:fadingMode="fade_in_out" android:duration="500">        <targets>            <target android:targetId="@id/tv"/>        </targets>    </fade></transitionSet>

没有scene怎么实现动画效果

代码

transitionManager.beginDelayedTransition(scene_root);View view2 = findViewById(R.id.view2);ViewGroup.LayoutParams params = view2.getLayoutParams();int dimension = (int) getResources().getDimension(R.dimen.dimen50);params.width = dimension;params.height = dimension;view2.requestLayout();

效果图

这里写图片描述

其它

参考:https://github.com/googlesamples/android-BasicTransition
demo:http://git.oschina.net/AnimationDemo/basictransition01

转换动画

Android Developer Guild :https://developer.android.google.cn/training/material/animations.html#Reveal
(还没太搞明白)
需要在API>=21,首先,在定义您从材料主题继承的风格时,使用 android:windowContentTransitions 属性启用窗口内容转换。您也可在您的风格定义中指定进入、退出以及共享元素转换:

<style name="BaseAppTheme" parent="android:Theme.Material">  <!-- enable window content transitions -->  <item name="android:windowContentTransitions">true</item>  <!-- specify enter and exit transitions -->  <item name="android:windowEnterTransition">@transition/explode</item>  <item name="android:windowExitTransition">@transition/explode</item>  <!-- specify shared element transitions -->  <item name="android:windowSharedElementEnterTransition">    @transition/change_image_transform</item>  <item name="android:windowSharedElementExitTransition">    @transition/change_image_transform</item></style>
<!--API>=21--><item name="android:windowContentTransitions">true</item><item name="android:windowTransitionBackgroundFadeDuration">5000</item><item name="android:windowEnterTransition">@android:transition/slide_right</item><item name="android:windowExitTransition">@android:transition/slide_right</item>
0 0
原创粉丝点击