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)
步骤
- 创建scene
- 转换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>