我SharedElementTransition
在打开新活动时使用。共享元素RecyclerView
在ActivityA中的a中(启动Activity),也在ActivityBRecyclerView
中的Fragment中的a中(新建Activity)。动画大部分都按预期工作,除了共享元素在整个动画中的最终位置也是可见的,这看起来很糟糕。
我的ActivityB.onCreate()
样子是这样的:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
<snip>
if (Utils.hasLollipop()) {
postponeEnterTransition();
}
}
在ViewHolder.onBindViewHolder()
包含我用作共享元素的图像的持有者中,我在将图像数据加载到视图中后调用它(在毕加索回调中):
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
private void triggerTransition() {
if (!hasTriggeredTransition) {
hasTriggeredTransition = true;
sharedElement.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
@Override
public boolean onPreDraw() {
sharedElement.setTransitionName("sharedElement");
sharedElement.getViewTreeObserver().removeOnPreDrawListener(this);
containingFragment.getActivity().startPostponedEnterTransition();
return true;
}
});
}
}
图像从它在 ActivityA 中的位置过渡到它应该在 ActivityB 中的位置,但在动画期间,它也出现在最终位置。在动画完成之前如何隐藏最终位置?
更新:为了简化,我删除了图像回调。现在,我只是将视图设置为纯色背景色并立即调用triggerTransition()
,结果相同。
相关地,有没有办法减慢动画的调试速度?