Android 共享元素跳转
时间: 2023-10-15 20:04:27 浏览: 89
Android共享元素跳转页面
Android 共享元素跳转是一种优雅的 UI 转场动画方式,它可以让两个 Activity 中的共享元素在转场过程中保持同步。这种方式可以让用户感到应用的操作流畅自然,提升用户体验。
下面是实现共享元素跳转的步骤:
1. 在布局文件中给共享元素添加 transitionName 属性,确保两个 Activity 中的元素名字相同。
```xml
<ImageView
android:id="@+id/imageView"
android:transitionName="image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/my_image"/>
```
2. 在启动目标 Activity 时,使用 ActivityOptionsCompat 实例携带共享元素信息,并使用 startActivity 方法启动新的 Activity。
```java
// 创建共享元素对象,传入图片的 transitionName 和 ImageView 实例
Pair<View, String> imagePair = Pair.create(imageView, "image");
// 创建 ActivityOptionsCompat,携带共享元素信息
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, imagePair);
// 启动目标 Activity
Intent intent = new Intent(this, TargetActivity.class);
startActivity(intent, options.toBundle());
```
3. 在目标 Activity 中,使用相同的 transitionName 属性对共享元素进行定义,并在 onCreate 方法中调用 postponeEnterTransition 方法,延迟共享元素的执行时间,直到加载完成。
```xml
<ImageView
android:id="@+id/imageView"
android:transitionName="image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:src="@drawable/my_image"/>
```
```java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_target);
// 定义共享元素
ImageView imageView = findViewById(R.id.imageView);
imageView.setTransitionName("image");
// 延迟共享元素的执行时间,直到加载完成
postponeEnterTransition();
// 加载完成后,执行共享元素的动画效果
imageView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
imageView.getViewTreeObserver().removeOnPreDrawListener(this);
startPostponedEnterTransition();
return true;
}
});
}
```
阅读全文