0

顾客要求:

我想通过移动背景的 2 个 png 元素(客户请求)在所有活动之间创建平滑过渡。详细说明:我有一个右侧元素应该向左移动 20sp,左侧有一个镜像元素应该向右移动。

我当前的代码:

过渡看起来不错,为此我在所有活动布局中创建了 2 个具有相同“transitionName”的共享元素:

android:transitionName="transitionLeft"

在我的清单中,我设置了自己的风格:

    <application
    android:allowBackup="true"
    android:fullBackupContent="@xml/backup_descriptor"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">

在我的“res/values/style.xml”中,我将 windowsContentTransitions 设置为 true:

<!-- Activity theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowContentTransitions">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
</style>

而且,可以肯定的是,在 onCreate() 开头的所有活动中,我都添加了:

getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);

在 onWindowFocusChanged() 的所有活动中,我设置了 SYSTEM_UI_FLAG_FULLSCREEN:

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus) {
        getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    // Hide the nav bar and status bar
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN);
        
    }
}

我的问题:

当我打开一个活动时,过渡已经运行,但我总是在工具和标题栏上看到一个短暂的淡入淡出,我不想拥有它。但是,在我看来,我所做的一切已经隐藏了这些栏,但它不会正常工作。

4

1 回答 1

0

我找到了解决方法:该问题与我的全屏应用程序有关。因此,要锁定状态和导航栏,您必须在 onCreate 开始时将 decorView.setSystemVisibility 设置为 SYSTEM_UI_FLAG_IMMERSIVE_STICKY,例如:

getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN);

有了这个,我再也看不到导航和状态栏了

于 2021-09-13T13:16:49.043 回答