赞
踩
Android 12 开始,在搭载 Android 12 或更高版本的设备上运行时,所有应用都将拥有启动动画。这包括启动时的进入应用动作、显示应用图标的启动画面,以及向应用本身的过渡。
开机第一次启动应用
用户杀死进程
系统回收了应用内存(进程被杀死)。
就是应用程序的进程不存在或被杀死,用户再次打开应用就会启动这个启动画面。
启动画面加载结束后,显示我们的Activity(MAIN)界面。
构成:应用图标(1、2)(静态动态两种) 图标背景(3) 窗口背景(4) 组成
中心图标 (1)
矢量可绘制对象
静态或动画形式
如果为动画形式时间不得超过 1000 毫秒
如果要实现动画效果则可以使用 AnimationDrawable
和 AnimatedVectorDrawable
呈现动画效果和进行绘制,那么还需要设置 windowSplashScreenAnimationDuration
,以在显示起始窗口的同时播放动画
默认情况下,使用启动图标
内容需要保留2/3的内边距,否则图标会被裁剪掉。
这里我只配置了启动画面的两个属性,代码如下
<style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<!--替换起始窗口中心的图标-->
<item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_center_img</item>
<!--设置要显示在启动画面底部的图片-->
<item name="android:windowSplashScreenBrandingImage">@drawable/ic_bottom_img</item>
</style>
<activity
android:name=".MainActivity"
android:theme="@style/SplashTheme"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
这里只用纯色填充举例,可以切换成对应的图片资源
代码如下
<!--动态更换图片-->
<item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_animate</item>
<!--设置动画时间-->
<item name="android:windowSplashScreenAnimationDuration">1000</item>
splash_animate:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<item android:drawable="@color/purple_200" android:duration="250"/>
<item android:drawable="@color/purple_500" android:duration="250"/>
<item android:drawable="@color/purple_700" android:duration="250"/>
<item android:drawable="@color/teal_200" android:duration="250"/>
</animation-list>
代码如下:
<!--替换起始窗口中心的图标-->
<item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_white</item>
<!--设置启动画面图标后面的背景-->
<item name="android:windowSplashScreenIconBackgroundColor">@color/white</item>
<!--设置要显示在启动画面底部的图片-->
<item name="android:windowSplashScreenBrandingImage">@drawable/ic_white</item>
<!--特定的单色填充背景-->
<item name="android:windowSplashScreenBackground">@color/white</item>
代码如下:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override protected void onResume() { super.onResume(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { getSplashScreen().setOnExitAnimationListener(splashScreenView -> { final ObjectAnimator slideUp = ObjectAnimator.ofFloat( splashScreenView, View.TRANSLATION_Y, 0f, -splashScreenView.getHeight() ); slideUp.setInterpolator(new AnticipateInterpolator()); slideUp.setDuration(100L); //控制时间 slideUp.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { splashScreenView.remove(); //移除启动画面 } }); slideUp.start(); }); //以此为例可以在监听中使用TASK、handler、timer等自定义控制启动页的显示时间 } } }
对以上内容感兴趣可以参考demo
了解更多内容请移至官方文档
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。