开机动画
两种开机动画
关于安卓动画的研究主要在frameworks/base/cmds/bootanimation/BootAnimation.cpp中。
安卓系统默认的开机动画(谷歌)的动画是显示android字样。如下:
bool BootAnimation::threadLoop() { bool r; if (mAndroidAnimation) { //如果没有bootanimation.zip则执行android原生动画 r = android(); } else { //否则执行自定义动画 r = movie(); } ... return r; }
android()
代码如下:
bool BootAnimation::android() { // SPRD: update android bootanimation resource @{ if (mWidth <= 160) { initTexture(&mAndroid[0], mAssets, "images/welcome_rh.bmp"); initTexture(&mAndroid[1], mAssets, "images/welcome_rh.bmp"); } else if (mWidth <= 240) { initTexture(&mAndroid[0], mAssets, "images/welcome_rh.bmp"); initTexture(&mAndroid[1], mAssets, "images/welcome_rh.bmp"); } else { initTexture(&mAndroid[0], mAssets, "images/welcome_rh.bmp"); initTexture(&mAndroid[1], mAssets, "images/welcome_rh.bmp"); } ... }
可以看到,原生动画是播放的两张图片,根据屏幕宽度来决定使用不同分辨离线率的图片。
该图片资源加载的是frameworks/base/core/res/assets/images下面的,所以如果需要修改这种开机动画的图片,那么就要把图片添加到该目录下,然后在android()方法中调用该图片即可。
movie()
该方法走的是自定义的开机动画,格式为bootanimation.zip。
- system/media/bootanimation.zip,放到该目录下,动画可以执行到开机完成
- data/local/bootanimation.zip,该到该目录下,动画只能执行10S。
一般情况下我们放在system/media下面。
bootanimation.zip的制作
要注意以下几点:
- 图片格式必须为png
- 图片命名要有顺序
- 压缩时要选择压缩方式为存储,即压缩比为0
bootanimation.zip的内容格式
包括part0,part1两个文件夹和一个desc.txt文件。
part0--一般用来存放播放一次的图片
part1--一般用来存放循环播放的图片
desx.txt--图片播放的配置文件
desc.txt
格式如下:
1080 1920 22 p 1 0 part0 p 0 0 part1
1080 1920分别为屏幕像素宽高,22为播放购帧率
p表示播放,1--播放一次,0--播放时动画线程休眠时间,一般为0,part0--指定为part0文件夹
p表示播放,0--循环播放,0--播放时动画线程休眠时间,一般为0,part1--指定为part1文件夹
保存的时候要注意为ANSI格式的,可以使用Notepad++来创建,默认为ANSI。
打包
如果是windows下面打包,注意选择打包方式为存储。
如果是linux,可以执行如下命令(par0,part1文件夹和desc.txt在同一文件夹下):
zip -r -X -Z store bootanimation.zip part*/*.png desc.txt
到这里开机动画文件就做好了,再把bootanimatin.zip拷贝到system/meida或者data/local下面就可以了。
开机铃声和关机动画和关机铃声后续更新。。。
如果错误,欢迎指定,不胜感谢!