棒棒糖活动共享元素过渡与淡入淡出

5
我将尝试做一个简单的共享元素转换,其中被点击的列表项的一行过渡到结果活动的顶部标题视图。我希望顶部标题视图占据列表项的位置,淡入,然后转换到最终位置。 以下是我为被调用活动编写的简单sharedElementEnterTransition:
<?xml version="1.0" encoding="utf-8"?>
<transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
    <fade android:fadingMode="fade_out" />
    <changeBounds />
    <changeTransform />
    <changeImageTransform />
</transitionSet>

然而,fade转换没有起到任何作用。我看到结果视图突然在原地弹出,然后变换到最终位置。
这是我启动活动的地方。
view.setOnClickListener(view -> {
    final Intent intent = new Intent(...);
    view.setTransitionName("test");
    final ActivityOptions options = 
        ActivityOptions.makeSceneTransitionAnimation(activity, view, "test");
    startActivity(intent, options.toBundle());
});

无法完全弄清楚正在发生什么。有人有任何想法吗?布局代码与 android:transitionName="test" 完全一致。


只是一个猜测,我认为 <fade android:fadingMode="fade_out" /> 单独使用没有后端编码支持是不起作用的。也许需要在头部代码中做些什么? - Ryan Fung
1
这也是我的猜测,但我已经尝试在目标视图上设置默认的visibilityalpha,但没有成功。我不确定如何告诉转换框架设置目标视图的起始状态。 - Jin
你能否尝试在编程中设置这些变量,而不是在XML文件中吗? - Ryan Fung
请查看此教程中的(共享元素的活动转换)以了解其工作原理 - http://www.raywenderlich.com/103367/material-design - Tasos
1个回答

0
同时在调试Visibility类时,我发现目标视图不是预期的视图,因此我强制进行了测试,看起来它能够正常工作。然而,我不确定这是否是完美的解决方案,因为我也同意它应该像其他转换一样(自动地)工作。
sharedElementEnterTransition = Fade(Visibility.MODE_IN).addTarget(your_view)

如果您想要顺序转换,您可能需要创建一个TransitionSet并将其添加。
val fadeIn = Fade(Visibility.MODE_IN).addTarget(your_view)
val move =  TransitionInflater.from(context) 
                    .inflateTransition(android.R.transition.move)

val transitionSet = TransitionSet().apply {
           ordering = ORDERING_TOGETHER
           addTransition(move)
           addTransition(fadeIn)
        }

sharedElementEnterTransition = transitionSet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接