您的位置:首页 > 移动开发 > Android开发

android Lollipop(5.0)--activity跳转动画

2015-05-07 17:19 459 查看
android Lollipop(5.0)对app中有共享view的activity直接的跳转提供了更好的动画交互。



实现步骤:

1,编写需要的transform。

2,给activity设置样式style。

3,标记2个activity共有的view。

4,使用ActivityOptions添加共有view。

5,在返回的时候调用finishAfterTransition(),而不是finish()。

1,编写需要的transform。



change_image_transform.xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android" >

<explode />

<changeTransform />

<changeClipBounds />

<changeBounds />

<changeImageTransform />

</transitionSet>
fade.xml

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android" >

<!-- 从边缘出入 -->
<!-- <slide /> -->
<!-- 从中心出入 -->
<!-- <explode /> -->
<!-- 淡入淡出 -->
<fade />

</transitionSet>

2,给activity设置样式style。

<style name="AppBaseTheme" parent="android:Theme.Material.Light">

<!-- 允许使用transitions -->
<item name="android:windowContentTransitions">true</item>
<!-- specify enter and exit transitions -->
<item name="android:windowEnterTransition">@transition/fade</item>
<item name="android:windowExitTransition">@transition/fade</item>
<!-- specify shared element transitions -->
<item name="android:windowSharedElementEnterTransition">@transition/change_image_transform</item>
<item name="android:windowSharedElementExitTransition">@transition/change_image_transform</item>
</style>

3,标记2个activity共有的view。

使用transitionName来标记共有view(目标activity的xml也需要)

<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bg"
android:transitionName="image" />

<TextView
android:id="@+id/tv_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/darker_gray"
android:elevation="5dp"
android:text="@string/hello_world"
android:transitionName="text" />


4,使用ActivityOptions添加共有view,跳转。

getWindow().setExitTransition(new Explode());

Intent intent = new Intent(this, BActivity.class);
// 一个共有元素
//			 ActivityOptions options =
//			 ActivityOptions.makeSceneTransitionAnimation(
//			 this, mViewImage, "image");

//多个共有元素
Pair[] pairs = new Pair[2];
pairs[0] = Pair.create(mViewContent, "text");
pairs[1] = Pair.create(mViewImage, "image");
ActivityOptions options = ActivityOptions
.makeSceneTransitionAnimation(MainActivity.this, pairs);
startActivity(intent, options.toBundle());


5,在BActivity返回的时候调用finishAfterTransition(),而不是finish()。

demo下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息