代码所在位置:/frameworks/base/cmds/bootanimation,其主要包含以下三个文件

BootAnimation_main.cpp

BootAnimation.h

bootAnimation.cpp

BootAnimation_main.cpp

BootAnimation.h

bootAnimation.cpp

2.3.1 Bootanimation_main.cpp

该文件是主入口文件;

int main(int argc, char** argv)

{

#if defined(HAVE_PTHREADS)

setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY);

#endif

char value[PROPERTY_VALUE_MAX];

property_get("debug.sf.nobootanimation", value, "0");

int noBootAnimation = atoi(value);

LOGI_IF(noBootAnimation,  "boot animation disabled");

if (!noBootAnimation) {

sp proc(ProcessState::self());

ProcessState::self()->startThreadPool();

// create the boot animation object

bool setBoot = true;

bool setRotated = false;

bool sePaly = true;

if(argc > 1){

if(!strcmp(argv[1],"shut"))

setBoot = false;

}

if(argc > 2){

if(!strcmp(argv[2],"nomp3"))

sePaly = false;

}

if(argc > 3){

if(!strcmp(argv[3],"rotate"))

setRotated = true;

}

char volume[PROPERTY_VALUE_MAX];

property_get("persist.sys.mute.state", volume, "-1");

int nVolume = -1;

nVolume = atoi(volume);

if(nVolume == 0 || nVolume == 1 ){

sePaly = false;

}

sp boot = new BootAnimation(setBoot,sePaly,setRotated);

IPCThreadState::self()->joinThreadPool();

}

return 0;

}

int main(int argc, char** argv)

{

#if defined(HAVE_PTHREADS)

setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY);

#endif

char value[PROPERTY_VALUE_MAX];

property_get("debug.sf.nobootanimation", value, "0");

int noBootAnimation = atoi(value);

LOGI_IF(noBootAnimation, "boot animation disabled");

if (!noBootAnimation) {

sp proc(ProcessState::self());

ProcessState::self()->startThreadPool();

// create the boot animation object

bool setBoot = true;

bool setRotated = false;

bool sePaly = true;

if(argc > 1){

if(!strcmp(argv[1],"shut"))

setBoot = false;

}

if(argc > 2){

if(!strcmp(argv[2],"nomp3"))

sePaly = false;

}

if(argc > 3){

if(!strcmp(argv[3],"rotate"))

setRotated = true;

}

char volume[PROPERTY_VALUE_MAX];

property_get("persist.sys.mute.state", volume, "-1");

int nVolume = -1;

nVolume = atoi(volume);

if(nVolume == 0 || nVolume == 1 ){

sePaly = false;

}

sp boot = new BootAnimation(setBoot,sePaly,setRotated);

IPCThreadState::self()->joinThreadPool();

}

return 0;

}   其主要的功能是根据传进来的参数决定是是要播放开机还是关机动画/铃音,并且启动BootAnimation;

2.3.2 BootAnimation.cpp

BootAnimation.cpp集成自Thread,在创建时会调用readyToRun()->threadLoop()。

status_tBootAnimation::readyToRun() {

……………省略………………………

mAndroidAnimation = false;

if(bBootOrShutDown){

status_t err = mZip.open("/data/local/bootanimation.zip");

if (err != NO_ERROR) {

err =mZip.open("/system/media/bootanimation.zip");

if (err != NO_ERROR) {

mAndroidAnimation = true;

}

}

}else {

if(!bShutRotate){

status_terr = mZip.open("/data/local/shutanimation.zip");

if (err != NO_ERROR) {

err =mZip.open("/system/media/shutanimation.zip");

if (err != NO_ERROR) {

mAndroidAnimation = true;

}

}

}

}

return NO_ERROR;

}

status_tBootAnimation::readyToRun() {

……………省略………………………

mAndroidAnimation = false;

if(bBootOrShutDown){

status_t err = mZip.open("/data/local/bootanimation.zip");

if (err != NO_ERROR) {

err =mZip.open("/system/media/bootanimation.zip");

if (err != NO_ERROR) {

mAndroidAnimation = true;

}

}

}else {

if(!bShutRotate){

status_terr = mZip.open("/data/local/shutanimation.zip");

if (err != NO_ERROR) {

err =mZip.open("/system/media/shutanimation.zip");

if (err != NO_ERROR) {

mAndroidAnimation = true;

}

}

}

}

return NO_ERROR;

}readyToRun() 方法判断/system/media/bootanimation.zip(shutanimaion.zip)是否存在,如果存在,则将 mAndroidAnimation 设置false,这个变量决定threadLoop中调用android()还是movie()来具体实现动画的播放。

boolBootAnimation::threadLoop()

{

........省略........

if(!bBootOrShutDown){

pSoundFileName="/data/local/shutaudio.mp3";

pBackupSoundFileName="/system/media/shutaudio.mp3";

} else {

pSoundFileName="/data/local/bootaudio.mp3";

pBackupSoundFileName="/system/media/bootaudio.mp3";

}

if (mAndroidAnimation)

r = android();

} else {

r = movie();

}

}

boolBootAnimation::threadLoop()

{

........省略........

if(!bBootOrShutDown){

pSoundFileName="/data/local/shutaudio.mp3";

pBackupSoundFileName="/system/media/shutaudio.mp3";

} else {

pSoundFileName="/data/local/bootaudio.mp3";

pBackupSoundFileName="/system/media/bootaudio.mp3";

}

if (mAndroidAnimation)

r = android();

} else {

r = movie();

}

}

threadLoop()方法根据 mAndroidAnimation 变量调用android()/movie(). 如果system/media/shutanimation.zip/bootanimation.zip存在的话,调用movie(),该接口会解析zip文件中的desc.txt文件,根据txt文件中的配置来播放动画。否则就调用android来播放原生自带的资源。

3、总结       对于图片资源时如何绘制的,我想这不是本文的重点,有兴趣的同学可以继续深究,这里仅仅是抛砖引玉。

android 4.2 开机动画,android开机动画制作与播放原理简介 (适用android4-4.2,其他版本未试验)...相关推荐

  1. android开机动画制作与播放原理简介

    android开机动画制作与播放原理简介 谁都想拥有一个华丽漂亮的开机动画,这让人心情舒畅,android是怎么来实现的?怎么制作一个自己的开机动画?这里揭开android开机动画的神秘面纱.

  2. 修改linux内核启动动画,Android 开机界面及Linux内核启动界面的修改(tiny6410)

    第一开机界面替换,即内核bootloader启动小企鹅界面更换 1.首先找一个自定义120*120的png图像,这里名称linux.png,但是后面的ppm名称必须是图中所示 在linux下执行下面代 ...

  3. android logo:内核、android开机动画

    android logo:内核.android开机动画 关键词:android 开机logo  开机动画 initlogo.rle   bootanimation  desc.txt 平台信息: 内核 ...

  4. Android系统定制开机logo和开机动画

    定制开机logo和开机动画 开机logo 开机动画 bootanimation.zip 生成zip文件 添加新的开机动画 开机logo MTK ASOP中lk阶段的logo是开机后的第一个界面,也被称 ...

  5. 手机android怎么开机画面,安卓开机动画特效软件下载

    欢迎来到Android上最好的开机动画经理.这个程序包含了比任何其他的应用程序更多的功能和开机动画!请检查ROM的工具箱Pro来得到这个程序加得多. 此应用程序需要的busybox和root访问权限. ...

  6. Android 8.0 开机动画,RK3326 android10.0(Q) 开机logo+开关机动画替换

    RK3326 android10.0(Q) 开机logo+开关机动画替换 2020年08月14日 | 萬仟网移动技术 | 我要评论 开机logouboot和kernel阶段的logo分别为开机显示的第 ...

  7. android+p开机动画,Android开机动画bootanimation.zip文件制作以及注意事项

    PS:红色字体需要特别注意 刚刚将原生Android系统开机logo和开机动画做了调整,为此耗费了接近半天的时间,碰到了很多问题,幸好最终达成了目的. 一,首先说一下bootanimation.zip ...

  8. android 刷机动画,Android开机动画修改方法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Android开机动画有两种修改方法,android 2.0及之后,使用bootanimation程序显示开机画面,如需修改开机画面,不用修改代码,只需按 ...

  9. Android修改开机Logo和开机动画

    做车机一般都会修改开机Logo和开机动画,下面只是记录我项目中修改开机Logo和开机动画的方法,仅供参考: 关于开机logo的修改,是将一张分辨率合适的名字必须为boot_logo.bmp格式的位深是 ...

最新文章

  1. 运维自动化------ansible搭建
  2. 使用vue-cli+element-ui+expsess+mysql做一个简易的登录功能
  3. 交互式计算机图形学总结:第五章 光照和明暗绘制
  4. 【Ubuntu】Linux必备软件之Samba
  5. java前端ajax提交数据_Java 前端使用Ajax通过FormData传递文件和表单数据到后台
  6. Bash字符串处理(与Java对照) - 18.格式化字符串
  7. 【英语学习】【English L06】U07 Jobs L5 Work overtime
  8. 如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager
  9. 近24小时以太坊上的DEX交易量超过150亿美元
  10. 2017.10.3 国庆清北 D3T2 公交车
  11. history模式 nginx配置_nginx反向代理部署vue项目(history模式)的方法
  12. 使django与数据库保持长连接
  13. 《Java从入门到放弃》JavaSE入门篇:练习——单身狗租赁系统
  14. java使用itextpdf生成 pdf (支持table)分页
  15. js中字符串按照汉字拼音排序
  16. oracle提高delete的效率,提高Oracle DELETE性能的策略
  17. coap 返回版本信息_CoAP协议详解
  18. AcWing《蓝桥杯集训·每日一题》—— 3777 砖块
  19. MySQL服务开机自启动失败
  20. 【JavaScript】this指向经典面试题(超详细)

热门文章

  1. OSChina 周五乱弹 —— 买个 6s 送老师
  2. 回报园子,推荐个靠谱的北京IT高端职位招聘信息微信
  3. 哪种渠道建设适合中国IT市场
  4. vim查找后的高亮取消办法
  5. 【SolidWorks】给表面粗糙度绘制多条引线
  6. 【路径规划】基于A星算法结合floyd和动态窗口法实现机器人栅格地图路径规划附matlab代码
  7. 使用python实现平均数运算
  8. Mysql性能监控工具Monyog完整安装
  9. C-木棍游戏 DFS暴力
  10. 请求重定向与转发的区别