tl; dr 如何在调用scrollToPosition()之后等到真正的滚动?真正滚动的意思是(1)RecyclerView
已经完成了滚动,(2)它已经为滚动的设置位置绑定了所有ViewHolder
s。
说明:
我正在尝试为回收者视图修复一些过渡动画,并且我很难实现它。
该应用与其中一项活动中的RecyclerView
一致,另一项ViewPager
充当"详细视图"当用户点击RecyclerView
。
从RecyclerView
到ViewPager
的向前导航功能完全正常,但问题是,向后导航无法正常工作。请注意,用户可以使用详情视图中的ViewPager
进行导航,当他们使用RecyclerView
重新输入活动时,该项目的位置可能与原始案例不同,这意味着{{ 1}}需要首先scol到项目,然后恢复过渡动画。
我无法让它发挥作用的原因是因为我在之前恢复了动画 RecyclerView
已经正确地控制并绑定了基础的RecyclerView
但是我不知道如何等待滚动真正完成然后恢复共享元素转换。
我在代码中执行的操作(在ViewHolder
代码上)是:
Reenter
我还在if (isReentering) {
// postpone the animation here
ActivityCompat.postponeEnterTransition(getActivity());
scollIndex = ... // determine the correct item position
layoutManager.scrollToPosition(scrollIndex);
final RecyclerView recyclerView = getRecyclerView();
new Handler().post(new Runnable() {
@Override
public void run() {
recyclerView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
recyclerView.getViewTreeObserver().removeOnPreDrawListener(this);
recyclerView.requestLayout();
ActivityCompat.startPostponedEnterTransition(getActivity());
return true;
}
});
}
});
}
中设置了转换名称:
Adapter
转换名称是项目的UUID,在基础@Override
public void onBindViewHolder(TViewHolder holder, int position) {
....
holder.setTransitionName(_data.get(position).getContentId().toString());
}
中设置。 View
和ViewPager
都设置正确。
RecyclerView
是正确的,scrollIndex
会滚动到它,但这里有一个问题:滚动和绑定仅在之后生效 I'我已经在我的代码中启动了推迟的输入转换(通过调用RecyclerView
),这会导致奇怪的过渡动画。
我想要发生的事情是以某种方式等到滚动和ActivityCompat.startPostponedEnterTransition(getActivity());
绑定完成然后再调用ViewHolder
所以我的问题是,我怎么能找到当滚动结束并且所有startPostponedEnterTransition
被绑定以便我可以调用它时?
非常感谢,