Android的Activity进入转换在重叠视图上无法按预期工作

6

以下是情境:

我在尝试声明两个活动之间的过渡动画 - 主活动和详细信息。主活动是一个带有图片的RecyclerView列表,详细信息则是来自父列表的头部图片的LinearLayout。这些过渡动画是在XML中声明并绑定到详细信息活动上的:

<item name="android:windowSharedElementEnterTransition">@transition/activity_enter_shared</item>
<item name="android:windowEnterTransition">@transition/activity_enter</item>

RecyclerView的适配器中,转换是这样触发的:
final ActivityOptions options = ActivityOptions.makeSceneTransitionAnimation(
    mContext, 
    imgView, 
    ViewCompat.getTransitionName(imgView)
);
mContext.startActivity(new Intent(mContext, ChildActivity.class), options.toBundle());

问题是: 在@transition/activity_enter中,我对一些布局元素(例如返回按钮)应用了fade。这些元素位于一个FrameLayout覆盖在一张图片上。这似乎会导致fade视图出现问题,它们不会平滑地出现在屏幕上,而是“弹入”。只有当视图重叠时才会发生这种情况 - 如果放置在LinearLayout中,所有内容都按预期工作。 fade@transition/activity_enter中声明如下:
<fade
    android:startDelay="300"
    android:duration="100"
    android:interpolator="@android:interpolator/linear">
    <targets>
        <target android:targetId="@id/target_id" />
    </targets>
</fade>

注意1 - 如果在程序中以编程方式触发,则在 Activity 中,fade 可以正常工作:

final ViewGroup frame = (ViewGroup) findViewById(R.id.frame);
frame.setOnClickListener(new View.OnClickListener() {
    boolean visible;

    @Override
    public void onClick(View v) {
        TransitionManager.beginDelayedTransition(frame);
        visible = !visible;
        frame.findViewById(R.id.target_id).setVisibility(visible ? View.VISIBLE : View.GONE);
    }
});

注意2 - 共享转场(@transition/activity_enter_shared)是自定义的,然而,使用默认的转场并不能解决问题。

注意3 - 在最简单的情况下,布局看起来像这样:

<FrameLayout>
    <ImageView />
    <ImageButton android:id="@+id/target_id" />
</FrameLayout/>

然而,问题并不是特定于FrameLayout而是视图重叠的问题。
注意事项4 - 例如,在下面的布局中,Lorem将弹出,而ipsum将淡入。 enter image description here
1个回答

2

好的,我找到了答案,对于那些感兴趣的人。

我必须设置

<item name="android:windowSharedElementsUseOverlay">false</item>

在我的样式定义中。

来自文档

指示共享元素在转换期间是否应使用覆盖。默认值为true。


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