Android平台图形系统启动后,出现含闪动的ANDROID字样的动画图片,

android开机动画叫源码位于frameworks/base/cmds/bootanimation下,这个程序会将/data/local/bootanimation.zip或/system/media/bootanimation.zip里面的png图片以动画的形式播放出来。

首先,我们先来分析一下源码:

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"


BootAnimation::readyToRun()

进入一个if判断语句

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;

}


bool BootAnimation::threadLoop()

{

bool r;

if (mAndroidAnimation)

     {

           r = Android();//执行android字体闪动的图片
      }

else

     {

            r = movie();// 执行bootanimation.zip中提供的动画图片

      }

//................

}

==> BootAnimation::Android()会加载"images/android-logo-mask.png"和"images/android-logo-shine.png"

==> BootAnimation::movie()会加载bootanimation.zip中的内容

我们下载的源码里默认是 没有 那些个.zip动画的,所以总会跳到android字体闪动的画面

所以如果你想用.zip的动画,那么把你做好的动画拷贝到编译好对应的目录下即可,然后执行make snod整合进img包就可以看到效果了

如果你想修改android闪动的那两张图片的话,最简单的方法是直接替换图片,如果你懂openGL的话也可以自己做酷炫的动画

那两张图片放在./frameworks/base/core/res/assets/images 目录下,一张镂空的android图,一张发光效果,动画效果就是下面那张发光的效果图不断左右移动。

我是用Photoshop直接修改的

修改完后直接替换,然后再 mmm frameworks/base , make snod 即可

以下是我修改后的效果图:

Android4.0.3 修改 启动 动画_开机动画


==============================


而bootanimation.zip中内容格式为

bootanimation.zip

|-- desc.txt

|-- part

其中desc.txt为描述文件

120 180 30

p 1 0 part


120和180分别对应图像 宽、高像素数,30表示将按照30fps速度播放图片

p 是一个分隔符,1 表示播放一遍,0表示播放完后停顿 0 帧,最后是图片所在的zip包里的目录名

part表示 含有图片的目录为part
p后面的数字是指播放次数 0为循环

根据这个语法,我们也可以自定义各种动画形式,例如下面所示:

  480 288 15

p 2 30 folder0 将folder0里的图片,播放2遍,播放完一遍后停顿30帧,因为我们之前设置了帧率是15帧每秒,那么这里就等于停顿2秒。

p 0 0 folder1 将folder1里的图片无限循环播放,每次播放不停顿。


制作bootanimation.zip注意:

     首先从里面的图片说起 图片可以是PNG格式也可以是jpg格式,建议找到的图片要和自己机子的分辨率一样,如果不是也可以的 有可能变形 注意图片的大小要统一(如果不会做连接的图片组 直接找个适合自己分辨率的动态图片分解出PNG格式的静态图片,用ImageReady可以批量导出)

     建立part1 part2或android文件夹 放进一组连接的图片组

     开始压缩成ZIP格式  名字一定要bootanimation.zip  压缩方式一定是存储     压缩完了看下大小一般最大的2MB左右 太大了用JPEG Imager压缩下 压缩图片很好的



然后part0,part1目录下内容结构为

|-- desc.txt

|-- part0

|   `-- bootanim_static_0000.png

`-- part1

    |-- bootanim_0000.png

    |-- bootanim_0001.png

    |-- bootanim_0002.png

    |-- bootanim_0003.png

    |-- bootanim_0004.png

    |-- bootanim_0005.png

    |-- bootanim_0006.png

    `-- bootanim_0007.png


最后我们来压缩



对于windows的压缩方法为:

使用winrar,选择ZIP格式,压缩标准要选“储存”。


==================

以下讲解 bootanimation.zip这个文件的结构。bootanimation里面主要包含一个desc.​​txt​​以及N个文件夹。而文件夹里面放着的就是你要的开机动画的图片。decs.txt的作用就是指导系统如何去执行你的开机画面。

下面继续说说desc.txt这个文档要怎么写。

先看例子,如果我的开机动画要用到2个文件夹,分别是part1和part2,。我希望开机的时候,先把part1里面的图片都播放一遍,然后再循环播放part2里面的文件,直到进入系统。那么decs.txt文档的内容应该如下:

320 480 5

p 1 0 part1

p 0 0 part2


就这么多,现在解释一下这些命令吧。

第一行,320 480是代表你屏幕的分辨率,因为我们的胖6是320*480的,这就不多说了。后面的5是说,5帧每秒,不懂的可以这么理解,5是代表一秒钟播放5张图片。就这么简单。

第二行,p 1 0 part1。p应该是play吧,也就是播放的意思。1是播放一次。0是空指令,就是什么都不做。part1就是说,这条指令是针对part1这个文件夹的。整条指令的意思就是,播放part1里面的图片1次,然后什么都不做,马上进入下一条指令。

第三行,p 0 0 part2。p依然是播放。第一个0这里是代表循环播放,第二个0和上面第二条指令一样,代表什么也不做。part2也就不多说了。


总结公式如下

第一条指令:屏幕的分辨率(空格)播放频率

第二条指令:p(空格)播放次数(空格)后续操作(空格)作用文件夹

第三条指令:同上

第N条指令:同上

屏幕分辨率的格式是:宽(空格)高,胖6的就是320 480。。。播放频率,上面已经说清楚了,至于到底要用多大的数字,视你开机动画的张数而定,比如说,一共有100张图片,开机时间是20秒,那么100/20就是5。

播放次数,1是代表一次,0代表循环播放。如果要播放2次的话,就是就是打个2上去,应该是这样吧,反正我是没试过,只试过0和1.

后续操作,0代表什么都不做,直接进入下一条指令。10是代表稍作停顿。


至于文件夹里面的图片,比较简单,首先,纠正一个说法,之前说必须要是png格式,经过我试验证明,jpg格式的也可以,其他的有待试验,不过只支持静态图片这点应该是真的,动态图片同样有待试验。其次,关于图片的尺寸,是不做要求的,只要在txt文档里写好手机的分辨率即可,开机的时候系统会自动适配。其次要按播放循序命名,建议用5位数字,比如说,第一张图片是00010,第二张就是00020.。。。。为什么要从00010开始,而不是00001?因为这事预防以后要在第一张和第二张中间再插一张图片进去的话,就可以把插进去的图片命名为00011,在00010之后,00020之前。就这么简单。至于图片那里来嘛,当然是自己网上找啦,也可以下载别人的bootanimation,然后修改一下。


最后就是压缩包了,把需要用到的part文件夹跟decs.txt打包成zip格式,必须是zip,不能是rar,而且打包的时候压缩方式要选择“存储”模式。然后改名成为bootanimation.zip。


要注意一下,bootanimation不能太大,大了会卡,一般不要超过3M。