Android的活动输入转换在重叠视图中不会按预期工作

时间:2017-04-11 09:14:01

标签: android animation transitions material

以下是该方案:

我正在尝试在两个活动之间声明过渡动画 - 主要和细节。 Master是带有图像的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 个答案:

答案 0 :(得分:0)

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

我必须设置

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

在我的风格定义中。

来自documentation

  

指示共享元素是否应在使用期间使用叠加   过渡。默认值为true。