在Android7.1系统上面,关机充电动画已不再是5.1里的几张图片,如下:
在Android5.1的system/core/healthd/images目录下,有如下文件:
battery_0.png
battery_1.png
battery_2.png
battery_3.png
battery_4.png
battery_5.png
battery_charge.png
battery_fail.png
capacity_text_bottom.png
capacity_text_left.png
capacity_text_right.png
capacity_text_top.png
而在Android7.1的同一目录下,则只有如下文件:
battery_fail.png
battery_scale.png
其中,battery_scale.png为相应的动画文件,我们查找了一翻,发现在bootable/recovery目录下有interlace-frames.py文件,该文件用于将几张PNG图片合成一张PNG图片,我们使用如下命令将上面的battery_scale.png解包:
python interlace-frames.py -d battery_scale.png -o battery.png
会生成battery00.png、……、battery05.png共6个文件,而这6个文件刚好对应system/core/healthd/healthd_mode_charger.cpp文件里的default_animation_frames定义:
static struct animation::frame default_animation_frames[] = {
{
.disp_time = 750,
.min_level = 0,
.max_level = 19,
.surface = NULL,
},
{
.disp_time = 750,
.min_level = 0,
.max_level = 39,
.surface = NULL,
},
{
.disp_time = 750,
.min_level = 0,
.max_level = 59,
.surface = NULL,
},
{
.disp_time = 750,
.min_level = 0,
.max_level = 79,
.surface = NULL,
},
{
.disp_time = 750,
.min_level = 80,
.max_level = 95,
.surface = NULL,
},
{
.disp_time = 750,
.min_level = 0,
.max_level = 100,
.surface = NULL,
},
};
表示在对应的level范围内显示对应的图片,6帧动画一一对应,这个可以按需修改参数。
我们将自己的6张新动画制作好后,使用如下命令打包成新的图片:
python interlace-frames.py -o battery_scale.png new/battery00.png new/battery01.png new/battery02.png new/battery03.png new/battery04.png new/battery05.png
该命令执行好后,新的battery_scale.png文件生成,我们只需替换使用即可。
在制作过程中碰到如下问题需要留意:
1.每一张图片文件,必须保存为PNG-8格式(即8位的PNG格式图片);
2.interlace-frames.py脚本需要修改如下:
将
import Image
import PngImagePlugin
修改为
from PIL import Image
from PIL import PngImagePlugin
网友评论