使用RecyclerView在SharedElementTransition期间可见最终位置

时间:2016-01-19 21:28:46

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

我在打开新活动时使用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(),结果相同。

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

1 个答案:

答案 0 :(得分:0)

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

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

    android:transitionOrdering="together"

    android:duration="250"> 

您甚至可以将订购更改为&#34;排序&#34;进一步分析..