0

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(),结果相同。

相关地,有没有办法减慢动画的调试速度?

4

1 回答 1

0

您应该能够通过增加转换 xml 文件中的持续时间值来减慢动画以进行调试,如下所示:

<transitionSet xmlns:android="http://schemas.android.com/apk/res/android"

    android:transitionOrdering="together"

    android:duration="250"> 

您甚至可以将 Ordering 更改为“sequencing”以进一步分析..

于 2016-01-26T07:07:01.333 回答