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

来源:互联网 发布:哪个租房软件最靠谱 编辑:程序博客网 时间:2024/05/29 02:12

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下载
0 0