jek*_*ena 3 android android-5.0-lollipop activity-transition shared-element-transition
我有一个带有图像的RecyclerView,当我按下图像时,应用程序会打开另一个包含ViewPager的活动,该活动具有相同的图像但位于我选择的图像的位置.
我已经在Lollipop中完成了转换,在活动之间使用supportPostponeEnterTransition和supportStartPostponedEnterTransition在被调用的活动中共享此图像,等待viewPager加载图像以开始转换.
当我进入被调用的活动时,当我按下时,转换是正常的.
我面临的问题是,如果我移动到被调用活动的ViewPager中的另一个图像,当我按下它时动画显示它在开始时选择的图像,而不是当前选择的图像.
我已经能够将动画图像更改为在被调用活动中选择的图像:
@Override
public void onBackPressed() {
View view = ((ImageDetailFragment) adapter.getFragment(viewPager,
viewPager.getCurrentItem())).getTransitionView();
ViewCompat.setTransitionName(view, Constants.TRANSITION_IMAGE);
super.onBackPressed();
}
Run Code Online (Sandbox Code Playgroud)
但它返回到调用活动列表中原始图像的相同位置.
如何使图像返回其在调用活动列表中的位置?
要做的第一件事是确保视图在没有任何Activity转换的情况下正常工作.也就是说,当您使用ViewPager从Activity返回时,RecyclerView Activity应该显示ViewPage正在显示的View.调用ViewPager活动时,请使用startActivityForResult并使用结果将RecyclerView滚动到正确的位置.
一旦工作,可以使活动过渡工作.我知道你已经在RecyclerView中为每个View提供了一个不同的transitionName,对吧?绑定View时,调用setTransitionName并为其指定可重复的名称.通常,这是图像URL或光标行ID,或者最糟糕的是一些像"image_"+ index这样的munged索引.
您需要做的下一件事是为调用Activity(退出)和被调用活动(enter)设置SharedElementCallback.在每个中,您将需要覆盖onMapSharedElements回调以重新映射共享元素.
@Override
public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) {
// assuming just one shared element, excuse the ugly code
sharedElements.put(names.get(0), mSharedElement);
}
Run Code Online (Sandbox Code Playgroud)
这里,mSharedElement已设置在调用(RecyclerView)活动中的onActivityReenter和onCreate中以及调用(ViewPager)活动中的finishAfterTransition(onBackPressed?)之前.
onActivityReenter专门为此案例提供了新功能.您可以在调用的Activity完成之前查看结果.
| 归档时间: |
|
| 查看次数: |
1478 次 |
| 最近记录: |