Android 淡入淡出过渡未按预期工作

Android 淡入淡出过渡未按预期工作,android,android-animation,android-transitions,Android,Android Animation,Android Transitions,我开始尝试过渡管理器和场景。 我试图做的是有3个任意的,完全不相关的布局,然后完全淡出,然后淡入(不是交叉淡入,只是顺序淡出和淡入)。 因此,场景:A->B->C.A在活动布局上用include标记预先填充 发生的情况是: 场景A逐渐消失 场景B逐渐消失 场景B不褪色地出现;(错误行为) 场景C逐渐消失 我过去在共享元素转换方面的经验让我相信这一切都是关于布局和适当的目标。因为这不是关于共享元素而是整个场景,所以我想针对所有布局元素,不管它们是什么,它们的ID是什么。下面是所有相关代码和XM

我开始尝试过渡管理器和场景。 我试图做的是有3个任意的,完全不相关的布局,然后完全淡出,然后淡入(不是交叉淡入,只是顺序淡出和淡入)。 因此,场景:A->B->C.A在活动布局上用include标记预先填充

发生的情况是:

  • 场景A逐渐消失
  • 场景B逐渐消失
  • 场景B不褪色地出现;(错误行为)
  • 场景C逐渐消失
我过去在共享元素转换方面的经验让我相信这一切都是关于布局和适当的目标。因为这不是关于共享元素而是整个场景,所以我想针对所有布局元素,不管它们是什么,它们的ID是什么。下面是所有相关代码和XML的完整列表

为启动序列而调用的方法:

@OnClick(R.id.transition_start)
protected void playSceneB(Button b) {
    final Scene scene_b = Scene.getSceneForLayout(mSceneContainer, R.layout.scene_b, this);
    final Transition transition = TransitionInflater.from(this)
            .inflateTransition(R.transition.transition);
    transition.addListener(mTransitionListener);
    TransitionManager.go(scene_b, transition);
}
听众:

private Transition.TransitionListener mTransitionListener = new EndTransitionListener() {
    @Override
    public void onTransitionEnd(Transition transition) {
        playSceneC();
    }

    @Override
    public void onTransitionCancel(Transition transition) {
        playSceneC();
    }
};
启动场景C的方法

private void playSceneC() {
    final Scene scene_c = Scene.getSceneForLayout(mSceneContainer, R.layout.scene_c, this);
    final Transition transition = TransitionInflater.from(this)
            .inflateTransition(R.transition.transition);
    TransitionManager.go(scene_c, transition);
}
过渡(两个场景更改相同):


布局(布局A和B是相同的,只是在textview上设置了不同的字符串):


布局图C:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/container"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/background"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:src="@mipmap/ic_launcher"/>

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:text="@string/hello3"/>
        </LinearLayout>
    </FrameLayout>
</FrameLayout>

注意。我希望它能在KitKat上运行

编辑:我试着使用自动转换,从XML和代码都可以,但都不起作用。还尝试通过手动调用Scene.enter()将其作为TransitionManager.beginDelayedTransition调用,但其行为仍然相同

Edit2:我已将侦听器添加到日志回调的两个转换中

  • 07-31 09:18:57.490 4744-4744/com.test.transition D/转换活动:onTransitionStart
  • 07-31 09:19:01.520 4744-4744/com.test.transition D/转换活动:onTransitionEnd
  • 07-31 09:19:01.520 4744-4744/com.test.transition D/转换活动:onTransitionPause
  • 07-31 09:19:01.520 4744-4744/com.test.transition D/过渡活动:第二次过渡开始
  • 07-31 09:19:03.530 4744-4744/com.test.transition D/过渡活动:第二个过渡结束

请注意时间安排。第一个在4s后结束。第二个在启动后2秒结束(只需淡入,淡出已启用)

我建议使用而不是handler.postdayed()

发布这篇文章,让潜在的观众在未来可能会得到一些提示

我让它工作了。当我从根视图组(id=container的组)中删除所有id时,它开始工作。显然,在这种特殊情况下,转换框架忽略了淡出此布局的子项


拥有不同的ID也很有效。

感谢您的输入。你是对的,这样更干净,但这并不能解决问题。我已经编辑了代码示例以显示当前状态。
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/container"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/background"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/hello"/>
    </FrameLayout>
</FrameLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/container"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/background"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:src="@mipmap/ic_launcher"/>

            <TextView
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center_vertical"
                android:layout_weight="1"
                android:text="@string/hello3"/>
        </LinearLayout>
    </FrameLayout>
</FrameLayout>