BootAnimation者,开机动画也。而型有二,其一谓之android,如滚石游走,自左到右;再者谓之movie,实乃名不副实,盖可自数张图片顺序播放而得,只若movie也。其真容可见于frameworks/base/cmds/bootanimation下。
Android模式,其实就是在系统开机的过程中,看到的闪动的ANDROID字样的动画,其本质是由两张图片叠加而来的。那两张图片放在./frameworks/base/core/res/assets/images 目录下,一张镂空的android图,一张发光效果,动画效果就是下面那张发光的效果图不断左右移动。
而以movie模式来看,主要是通过如下三个路径是否存在文件判断来实现:
#define USER_BOOTANIMATION_FILE "/data/local/bootanimation.zip"
#define SYSTEM_BOOTANIMATION_FILE "/system/media/bootanimation.zip"
#define SYSTEM_ENCRYPTED_BOOTANIMATION_FILE "/system/media/bootanimation-encrypted.zip"
关于两种模式的切换,可以参考如下代码的实现:
BootAnimation::readyToRun()
进入一个if判断语句
1
2
3
4
5
6
7
8
9
10
11
|
if
((encryptedAnimation &&
(access(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE, R_OK)
=
=
0
) &&
(mZip.
open
(SYSTEM_ENCRYPTED_BOOTANIMATION_FILE)
=
=
NO_ERROR)) ||
((access(USER_BOOTANIMATION_FILE, R_OK)
=
=
0
) &&
(mZip.
open
(USER_BOOTANIMATION_FILE)
=
=
NO_ERROR)) ||
((access(SYSTEM_BOOTANIMATION_FILE, R_OK)
=
=
0
) &&
(mZip.
open
(SYSTEM_BOOTANIMATION_FILE)
=
=
NO_ERROR))) {
mAndroidAnimation
=
false;
}
|
BootAnimation::threadLoop()
1
2
3
4
5
|
if
(mAndroidAnimation) {
r
=
Android();
/
/
执行android字体闪动的图片
}
else
{
r
=
movie();
/
/
执行bootanimation.
zip
中提供的动画图片
}
|