android开机动画显示原理:
开机时,系统自动检测在/system/media/目录或/data/local/目录有没有bootanimation.zip文件。如果有,这按照bootanimation.zip里面的png排列顺序依次显示开机图片,开起来就是动画效果;否则按照android默认的方式显示开机动画。

android开机动画叫源码位于frameworks/base/cmds/bootanimation下,这个程序编译后生成/syetem/bin/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;    }


BootAnimation::threadLoop()

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字体闪动的画面。

知道原理之后,自定义开机画面就简单了,我们直接在/system/media/目录或是在/data/local/目录加上bootanimation.zip文件就可以了。

bootanimation.zip文件由下面几个文件目录组成:
desc.txt 动画属性描述文件
part0第一阶段动画图片的目录 (动画是由一帧帧图片组成的)
part1第二阶段动画图片的目录
...
partn

一般来说就两个文件夹part0、part1,两个文件夹里面放着编号号的png图片。

desc.txt文件内容格式如下:
320 480 5
p 1 0 part0
p 0 0 part1

解释下:
320为图片的宽,480为图片的高,后面的那个5表示帧数,即每秒播放的图片张数。
p为描述符,后面的1表示播放一次,后面的0表示阶段切换时间,part0表示png资源路径。
p为描述符,后面的0表示本阶段无限循环(直到开机结束),再后面的0表示本阶段切换时间,part1表示路径。

自己生成bootanimation.zip时,只要编辑好desc文档,再把相应的png图片资源放到各自的文件夹即可,准备好这些直接压缩生成bootanimation.zip文件(注意不要压缩文件,直接选择存储方式压缩,要不然不能正确获取到png图片,开机时会一直黑屏),然后把.zip文件用adb push到/system/media或是/data/local目录,重启,这是应该就会显示自定义的开机动画了。

更多相关文章

  1. 创建android文件系统(Root file system)
  2. Android 图片倒影和setXfermode
  3. Android OpenGL开发目录
  4. android xml布局文件属性说明
  5. Android 5.1 API 22 所有sdk文件下载地址
  6. RadioButton修改标志图片

随机推荐

  1. android获取网络类型
  2. Android版本和API level对应关系
  3. 【Android】数据存储之Network
  4. Android完整弹窗界面
  5. android读取本地网页
  6. Android语法清单
  7. Android的WebView如何播放视频
  8. Android(安卓)CTS one function
  9. Android(安卓)Studio下多渠道打包
  10. Android(安卓)机顶盒Mobx 对接xbmc