我将共享元素转换与 recyclerview 一起使用,如您在此 gif 中所见:
开始共享元素转换有一个延迟,这与动画的速度无关,它就像开始时的加载延迟,如果你注意到,有一个瞬间整个背景消失,只有图像保留在那里,那moment是我要去掉的,也就是我说的延迟。我怎样才能删除它并使整个事情更顺利?现在真的很难看,这是我第一次做这个动画,所以如果你有什么建议,我将不胜感激。
这是在我的适配器中处理共享元素转换的代码:
holder.image.setTransitionName("example_transition");
Intent intent = new Intent(context, ShowElementActivity.class);
intent.putExtra("Element", elemento);
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(
(AnimeActivity)context, holder.image, ViewCompat.getTransitionName(holder.image));
context.startActivity(intent, options.toBundle());
这是在目标内部处理它的代码:
postponeEnterTransition();
Glide.with(this)
.load(elemento.image_url)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
supportStartPostponedEnterTransition();
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
startPostponedEnterTransition();
return false;
}
})
.into(showelement_image);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
getWindow().getSharedElementEnterTransition().setDuration(200);
getWindow().getSharedElementReturnTransition().setDuration(200)
.setInterpolator(new DecelerateInterpolator());
}
Fade fade = new Fade();
fade.excludeTarget(android.R.id.statusBarBackground, true);
fade.excludeTarget(android.R.id.navigationBarBackground, true);
getWindow().setEnterTransition(fade);
getWindow().setExitTransition(fade);
最佳答案
此延迟是 new Activity
的成本,而不是 Transition
的成本,如果您不使用 Animation,您将看到相同的性能。所以使用Fragment
而不是Activity
。
由于新的 Activity 性能,我正在通过 Single Activity
和 Multiple Fragments
开发应用程序以获得最佳性能。
关于java - android shared element transition start transition有延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74659324/