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
fade.xml
2,给activity设置样式style。
true
@transition/fade
@transition/fade
@transition/change_image_transform
@transition/change_image_transform
3,标记2个activity共有的view。
使用transitionName来标记共有view(目标activity的xml也需要)
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/bg"
android:transitionName="image" />
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()。