Android 12 启动画面不会动画

Android 12 Splash Screen will not animate

我正在为 Android 12 使用新发布的启动画面 API,但是可动画矢量不会动画。显示的图标只是可绘制对象的快照。

我已将这行代码添加到我的 themes.xml 文件中:

<item name="android:windowSplashScreenAnimatedIcon">@drawable/sample</item>

sample.xml

<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:aapt="http://schemas.android.com/aapt" >
    <aapt:attr name="android:drawable">
        <vector
            android:height="64dp"
            android:width="64dp"
            android:viewportHeight="600"
            android:viewportWidth="600" >
            <group
                android:name="rotationGroup"
                android:pivotX="300.0"
                android:pivotY="300.0"
                android:rotation="45.0" >
                <path
                    android:name="v"
                    android:fillColor="#000000"
                    android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
            </group>
        </vector>
    </aapt:attr>

    <target android:name="rotationGroup"> *
        <aapt:attr name="android:animation">
            <objectAnimator
                android:duration="6000"
                android:propertyName="rotation"
                android:valueFrom="0"
                android:valueTo="360" />
        </aapt:attr>
    </target>

    <target android:name="v" >
        <aapt:attr name="android:animation">
            <set>
                <objectAnimator
                    android:duration="3000"
                    android:propertyName="pathData"
                    android:valueFrom="M300,70 l 0,-70 70,70 0,0 -70,70z"
                    android:valueTo="M300,70 l 0,-70 70,0  0,140 -70,0 z"
                    android:valueType="pathType"/>
            </set>
        </aapt:attr>
    </target>
</animated-vector>
 

MainActivity.java

package com.example.simplesplashscreen;

import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

您还需要提供时长:

如果您使用平台API(Android 12+):

<item name="android:windowSplashScreenAnimationDuration">3000</item>

如果您使用 core-splashscreen 库:

<item name="windowSplashScreenAnimationDuration">3000</item>

请注意,动画矢量仅适用于 Android 12+