android 共享元素

首先,要知道共享元素只用于21+版本。
这里只提关键步骤:

1.values-v21文件夹中的style设置同名主题:

<item name="android:windowContentTransitions">true</item>

2.启动activity配置

(1)xml
共享元素设置【此项设置和打开的activity共享元素设置相同】

android:transitionName="shareElementName"

(2)java

//此处shareElementName内容和(1)相同
Bundle options = ActivityOptionsCompat.makeSceneTransitionAnimation(this, view, "shareElementName").toBundle();
ActivityCompat.startActivity(this,intent, options);

3.打开的activity设置

(1)xml
共享元素设置【此项设置和启动的activity共享元素设置相同】

android:transitionName="shareElementName"

(2)java

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
            getWindow().setExitTransition(new Explode());
        }

ps:此时onBackPress是有共享元素效果的,而finish没有。

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; } }); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值