android 4.2 开机动画,android开机动画制作与播放原理简介 (适用android4-4.2,其他版本未试验)...
代码所在位置:/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,其他版本未试验)...相关推荐
- android开机动画制作与播放原理简介
android开机动画制作与播放原理简介 谁都想拥有一个华丽漂亮的开机动画,这让人心情舒畅,android是怎么来实现的?怎么制作一个自己的开机动画?这里揭开android开机动画的神秘面纱.
- 修改linux内核启动动画,Android 开机界面及Linux内核启动界面的修改(tiny6410)
第一开机界面替换,即内核bootloader启动小企鹅界面更换 1.首先找一个自定义120*120的png图像,这里名称linux.png,但是后面的ppm名称必须是图中所示 在linux下执行下面代 ...
- android logo:内核、android开机动画
android logo:内核.android开机动画 关键词:android 开机logo 开机动画 initlogo.rle bootanimation desc.txt 平台信息: 内核 ...
- Android系统定制开机logo和开机动画
定制开机logo和开机动画 开机logo 开机动画 bootanimation.zip 生成zip文件 添加新的开机动画 开机logo MTK ASOP中lk阶段的logo是开机后的第一个界面,也被称 ...
- 手机android怎么开机画面,安卓开机动画特效软件下载
欢迎来到Android上最好的开机动画经理.这个程序包含了比任何其他的应用程序更多的功能和开机动画!请检查ROM的工具箱Pro来得到这个程序加得多. 此应用程序需要的busybox和root访问权限. ...
- Android 8.0 开机动画,RK3326 android10.0(Q) 开机logo+开关机动画替换
RK3326 android10.0(Q) 开机logo+开关机动画替换 2020年08月14日 | 萬仟网移动技术 | 我要评论 开机logouboot和kernel阶段的logo分别为开机显示的第 ...
- android+p开机动画,Android开机动画bootanimation.zip文件制作以及注意事项
PS:红色字体需要特别注意 刚刚将原生Android系统开机logo和开机动画做了调整,为此耗费了接近半天的时间,碰到了很多问题,幸好最终达成了目的. 一,首先说一下bootanimation.zip ...
- android 刷机动画,Android开机动画修改方法
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Android开机动画有两种修改方法,android 2.0及之后,使用bootanimation程序显示开机画面,如需修改开机画面,不用修改代码,只需按 ...
- Android修改开机Logo和开机动画
做车机一般都会修改开机Logo和开机动画,下面只是记录我项目中修改开机Logo和开机动画的方法,仅供参考: 关于开机logo的修改,是将一张分辨率合适的名字必须为boot_logo.bmp格式的位深是 ...
最新文章
- 运维自动化------ansible搭建
- 使用vue-cli+element-ui+expsess+mysql做一个简易的登录功能
- 交互式计算机图形学总结:第五章 光照和明暗绘制
- 【Ubuntu】Linux必备软件之Samba
- java前端ajax提交数据_Java 前端使用Ajax通过FormData传递文件和表单数据到后台
- Bash字符串处理(与Java对照) - 18.格式化字符串
- 【英语学习】【English L06】U07 Jobs L5 Work overtime
- 如何将同一云服务下的虚拟机从经典部署模型迁移到 Azure Resource Manager
- 近24小时以太坊上的DEX交易量超过150亿美元
- 2017.10.3 国庆清北 D3T2 公交车
- history模式 nginx配置_nginx反向代理部署vue项目(history模式)的方法
- 使django与数据库保持长连接
- 《Java从入门到放弃》JavaSE入门篇:练习——单身狗租赁系统
- java使用itextpdf生成 pdf (支持table)分页
- js中字符串按照汉字拼音排序
- oracle提高delete的效率,提高Oracle DELETE性能的策略
- coap 返回版本信息_CoAP协议详解
- AcWing《蓝桥杯集训·每日一题》—— 3777 砖块
- MySQL服务开机自启动失败
- 【JavaScript】this指向经典面试题(超详细)