使用StaggeredGridLayoutManager返回到RecyclerView的共享元素转换是不正确的

时间:2018-03-31 06:46:30

标签: android android-recyclerview shared-element-transition

当我使用带有StaggeredGridLayoutManager和共享元素的recyclerview回到活动时,我遇到了问题。

为了告诉我问题,我创建了一个小应用程序:
https://github.com/Anton111111/RecyclerViewSharedElement/tree/master/app/src/main/java/anton111111/com/recyclerviewsharedelement

在MainActivity中,我使用带有StaggeredGridLayoutManager的RecyclerView。此RecyclerView的适配器为每个项目设置随机高度。
点击项目我打开DetailsActivity( https://github.com/Anton111111/RecyclerViewSharedElement/blob/master/app/src/main/java/anton111111/com/recyclerviewsharedelement/DetailsActivity.java

在DetailsActivity上我也有RecyclerView。 当我打开DetailsActivity转换正常工作。但是如果我滚动RecyclerView然后按回来过渡到MainActivity工作不正确。

为了显示它,我创建了一个小视频:https://youtu.be/zVtS5vVFZ7s
在这个视频中,我从第14项回来了。在过渡动画到达recyclerview之后,你如何看到它返回到第14项然后第14项。

我认为我的问题在onActivityReenter方法中,这是代码:

 public void onActivityReenter(int resultCode, Intent data) {
  super.onActivityReenter(resultCode, data);
  newPosition = data.getIntExtra(EXTRA_POSITION, -1);
  postponeEnterTransition();
  if (newPosition > -1) {
   recyclerView.scrollToPosition(newPosition);
  }
  recyclerView.getViewTreeObserver().addOnPreDrawListener(
   new ViewTreeObserver.OnPreDrawListener() {
    @Override
    public boolean onPreDraw() {
     startPostponedEnterTransition();
     return true;
    }
   });
 }

在这个方法上,我滚动到后面的项目位置。我使用postponeEnterTransition();并在RecyclerView的startPostponedEnterTransition();上使用onPreDraw()

任何人都可以帮助我并说出滚动到位置后startPostponedEnterTransition()如何完成?

0 个答案:

没有答案