android 点赞动画_安卓系统定制开机动画

2f757aa5253d3b2b107d770b6221a9de.gif

点击上方蓝字关注我哦~

01

前言

前一篇文章中简述了如何修改开机logo,本篇来介绍如何修改开机动画。

02

 开机动画的显示原理

Android系统开机动画, 是由bootanimation进程将一组逐帧的图片按次序循环播放,从而形成形成的动画效果。

bootanimation启动

bootanimation是一个native进程,由c++编写,在开机的过程中由init进程启动。

/init.rcservice bootanim /system/bin/bootanimation class coreuser graphicsgroup graphics audiodisabledoneshot

在SurfaceFlinger.cpp启动时在初始化init()函数里会调用startBootAnim()。

void SurfaceFlinger::startBootAnim() {property_set("service.bootanim.exit", "0");property_set("ctl.start", "bootanim");}

同时设置了两个系统属性:service.bootanim.exit和ctl.start。

init进程检测到ctl.start被设成bootanim后,

就会再去init.rc里找bootanim的service, 然后启动/system/bin/bootanimation进程。

bootanimation实现

bootanimation代码目录在

frameworks/base/cmds/bootanimation/里。功能实现主要在BootAnimation.cpp文件里。

Bootanimation继承于Thread(), 所以bootanimation显示的主要部分在threadLoop()函数里。

bool BootAnimation::threadLoop(){bool r; if (mZip == NULL) {r = android();} else {r = movie();}  …return r;}

mZip表示桢动画的zip文件对象,优先级依次是

”/system/media/bootanimation-encrypted.zip”“/system/media/bootanimation-encrypted.zip””/system/media/bootanimation.zip”

如果这三个文件全都不存在,就会调用android()函数,也就是原生的”android”几个字母滚动的动画。如果其中任何一个zip文件存在,则调用movie()函数,这里面会解压zip包,然后在一个while循环里显示,也就是看到的动画效果。

bootanimation退出

开机动画显示都是在一个死循环里,当系统启动完成之后,必须要退出bootanimation, 然后显示launcher桌面。

当Android系统启动完成发送boot_complete广播的同时,会调用SurfaceFlinger.cpp的bootFinished()函数。在bootanimation进程的android()或者movie()里都会循环调用checkExit()函数检测“service.bootanim.exit”的值;

当”service.bootanim.exit”的值为1时,调用requestExit()便会通知线程需要结束,也就退出了动画播放。Android系统开机动画就结束了。

03

开机动画的制作

创建 bootanimation.zip 文件,该压缩包文件里存放有逐帧动画和控制脚本,通过连续切换显示图片达到动画的效果。

bootanimation.zip压缩包文件结构:

208d8462ce4058294fa05e1a16a4a36f.png

desc.txt 动画属性描述文件

part0 第一阶段动画图片目录

part1 第二阶段动画图片目录

制作方法:

(1)将第一部分图片按播放顺序命名好,保存在part0的文件夹中,

例如:001.jpg、002.jpg。实测图片格式为png或bmp也可。

(2)将第二部分图片按播放顺序命名好,保存在part1的文件夹中,

例如:001.jpg、002.jpg

(3) desc.txt 的文档:

800 1280 12p 1 0 part0p 0 10 part1

第一行:图片属性800(宽度) 1280(高度) 12(每秒显示帧数) 无

第二行:第一阶段动画属性 p(默认标志符) 1(循环次数为1) 0(进入该阶段的间隔时间 part0(该阶段图片的存放目录)

第三行:第二阶段动画属性 p(默认标志符) 0(无限循环)10(进入该阶段的间隔时间)part1(该阶段图片的存放目录)

每秒显示帧数:每秒显示的图片数量。

间隔时间:该阶段结束后间隔多久进入下一阶段显示,单位为每张图片的显示时间。

如果并没有两个阶段的动画,可以只有一个文件夹。并且在desc.txt只描述一个。如本例:

d14930a00241dc53853659706a487584.png

Part目录就三张滚动的图片。

9ad41518054502a2811c83b89bce7805.png

desc.txt内容

800 1280 1p 0 0 part

1秒刷新一张且无限循环。

(4) 选中part0、part1和desc.txt进入自定义压缩,压缩文件格式为 zip,压缩方式为存储,命名为bootanimation.zip。注意选择文件时为多选,而不是选择desc.txt上一级的目录。

3a531b71b6d028c4f633727706d86a21.png

(5) push验证。将生成的bootanimation.zip push到/system/media/目录下,重启验证。

(6) 将压缩包拷贝到 device/*/$(TARGET_DEVICE) 目录下。

例如:RK3399 的目录在

device/rockchip/rk3399/bootanimation.zip

(7) 修改 

device/*/$(TARGET_DEVICE)/$(TARGET_DEVICE).mk 文件。

例如:

RK3399 是 device/rockchip/rk3399/rk3399.mk中添加。

PRODUCT_COPY_FILES += device/rockchip/rk33399/bootanimation.zip:system/media/bootanimation.zip

表示将zip拷贝到system/media/目录内。

(8) 编译system.img,烧录即可。

/ The End /

推荐阅读

安卓系统定制开机logo图片

新增LED设备--从上层到底层理解安卓架构之Service篇

本文由【嵌入式案例Show】原创出品,未经许可,请勿转载

5192bd9814ac58b23bb569c119caf608.gif

扫码关注我们

看更多嵌入式案例

626cb9cdf07f407c2d7163b9e81bc99a.png

喜欢本篇内容请给我们点赞、在看

402beb17278e04f5a3a3bdee44a72875.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值