我有两个活动MainAcitity
和DetailActivity
。 MainActivity
在recyclerview
的片段中包含viewpager
。当我单击项目时,它将转到DetailActivity
,并在viewpager
中DetailAcitivty
的片段内显示详细信息。
问题是:
当我单击transition
中的recyclerview
项并转到MainActivity
时,我想添加DetailActivity
。
当我从DetailActivity
返回到MainActivity
时,我希望它的过渡会出现在我在viewpager
刷过的那个项目上。
我该如何实现?
注意:
-MainAcitivty
和DetailAcitivty
都包含viewpager
。
谢谢!
答案 0 :(得分:0)
您将需要用唯一的transitionName标记两个视图。
ViewCompat.setTransitionName(imageView, "some_unique_transitionName");
使用此新信息开始新活动
ActivityOptionsCompat options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, imageView, ViewCompat.getTransitionName(imageView));
activity.startActivity(intent, options.toBundle());
现在,关于新活动:
根据您打开下一个活动的方式以及视图层次结构的复杂程度,您可能会可能在onCreate期间使用supportPostponeEnterTransition();
,并在设置之后的某个时间supportStartPostponedEnterTransition();
使用。我会让你阅读文档
除此之外,找到需要动画的新活动的视图并在其上设置过渡名称
activityImage.setTransitionName(transitionName);
让它撕裂。
您可能需要修改的其他内容可能包括动画持续时间,插值器等。
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);
请记住,共享元素过渡遍历整个视图层次结构以查找源视图和目标视图,并且只有在目标活动完全放置好之后,框架反向过渡才能为您提供您想要实现的错觉,如果是,层次结构很复杂,或者活动需要花费一些时间来建立(取决于网络),因此您可能需要进行一些修改。