安卓开机动画的制作

来源:互联网 发布:js跳转action方法 编辑:程序博客网 时间:2024/05/16 12:09

开机动画的存储位置:system/media/bootanimation.zip。

bootanimation.zip的文件结构:包含一个desc.txt和N个文件夹(一般两个)。desc.txt是用来指导如何执行动画页面。文件夹里存放要播放的照片(支持png和jpg格式)。


重点是descs.txt 文档的内容:

1280 720 10
p 1 0 part1
p 0 0 part2
第一行的1280和720是屏幕的分辨率,10是每秒10帧(播放速度)。
第二行p是play的意思,1 是播放一次,0 是每帧之间的pause(If pause = 10, it will show the last frame and thensleep 10/fps seconds before continuing with the animation.) ,作用是把part1中的所有照片播放一遍。
第三行p的意思同上,0 是无限循环播放,第二个0 同上,作用是文件夹中的照片循环播放直到开机。

制作要注意的事项:
图片命名:按播放顺序命名,一般用5位数字,第一张00010第二张00020,这样便于后期插入图片。

压缩包:把part文件夹和decs.txt打包成zip格式,不能是rar,并且打包时采用“存储”模式,命名为bootanimation.zip。大小不要超过5M,太大会卡


源码分析:

位置:frameworks/base/cmds/bootanimation/BootAnimation.cpp

定义部分:

#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"</span>


BootAnimation::readyToRun()

里面是判断句

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;    }</span>


接下来在BootAnimation::threadLoop()中具体执行

if (mAndroidAnimation) { r = Android(); // 执行android字体闪动的图片 } else { r = movie(); // 执行bootanimation.zip中提供的动画图片 }</span>

BootAnimation:Android()加载android-logo-mask.png和android-logo-shine.png两张图片。

BootAnimation::movie()加载bootanimation.zip中的内容。

源码里默认是没有bootanimation.zip动画的,总会执行android闪动字体画面。

如果想修改闪动的字画可以直接替换,具体在frameworks/base/core/res/assets/image目录下,动画效果是发光效果图不断左右移动。






1 0