如果提供横向模式的替代布局,则纵向模式的共享动画不会动画。 (对于 android 支持库 23.0.0)

Shared animation for portrait mode does not animate if alternate layout for landscape mode is provided. ( For android support library 23.0.0)

在我的应用程序中,启动时出现启动徽标屏幕。当主屏幕在计时器结束时启动时,我将共享过渡应用于该初始徽标图像。在过渡期间,它从中心(启动画面)移动到左上角(主屏幕工具栏)。

我正在使用 AppbarLayout 和工具栏。我正在使用两种不同的应用栏变体来实现以下设计。 创建两个(land/appbar_home 和 layout/appbar_home)布局后,将它们包含在 fragment_home 中(其中有协调器布局为顶部)。

在我开始使用 23.0.0 版的 android 库(appcompat、支持和设计)之前,整个代码运行良好。移动到更高版本 (23.0.0) 的库后,纵向模式的转换停止。但同时,如果设备处于横向模式,它运行良好。

在几次本地修复失败后,决定在不同的项目中尝试该方案。在新项目中,我添加了一个应用栏布局 (layout/appbar_home) 动画效果很好,但一旦我添加 land/appbar_home,它就停止在纵向模式。在横向模式下,它会按预期进行动画处理。可以看到测试项目on github.

图书馆似乎出了点问题。但如果不是,代码或方法有什么问题。

我也遇到了同样的问题,只好切换回22版本的库解决了。您也可以尝试将所有库更新到相同版本 (23),但这对我没有帮助

这似乎是库的问题,但我有一种方法可以让您暂时使用它,直到它被修复。

如果您在代码中设置 transitionName 而不是 XML,它将适用于纵向和横向:

同时更新纵向和横向appbar_home.xml 布局以给 ImageView 一个 id:

<ImageView
        android:id="@+id/appbar_logo"
        android:layout_width="wrap_content"
        android:layout_height="?attr/actionBarSize"
        android:layout_margin="5dp"
        android:adjustViewBounds="true"
        android:src="@drawable/rnd_1"
        android:transitionName="@string/transition_logo" />

然后在您的 HomeActivityFragment 中,在您的 onCreateView 中设置 transitionName:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.fragment_home, container, false);
    ImageView appBarLogo = (ImageView) rootView.findViewById(R.id.appbar_logo);
    ViewCompat.setTransitionName(appBarLogo, "logo_transition");
    return rootView;
}