我在打开新活动时使用SharedElementTransition
。共享元素位于ActivityA中的RecyclerView
(启动活动),也位于ActivityB(新活动)中的片段中的RecyclerView
中。除了共享元素在整个动画中的最终位置也可见时,动画大部分都按预期工作,看起来非常糟糕。
我的ActivityB.onCreate()
看起来像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
<snip>
if (Utils.hasLollipop()) {
postponeEnterTransition();
}
}
在包含我用作共享元素的图像的持有者的ViewHolder.onBindViewHolder()
中,我在将图像数据加载到视图中后(在Picasso回调中)调用此函数:
@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()
,结果相同。
相关地,有没有办法减慢动画的调试速度?
答案 0 :(得分:0)
您应该能够通过增加转换xml文件中的持续时间值来减慢动画以进行调试,如下所示:
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="together"
android:duration="250">
您甚至可以将订购更改为&#34;排序&#34;进一步分析..