Android系統自定義關機充電圖示
阿新 • • 發佈:2021-01-23
技術標籤:Androidandroidbootablecharging
需求描述
關機充電圖示的修改地址在哪裡?替換照片有哪些格式要求?
實現方案
圖片路徑:
system/core/healthd/images/
關機充電:
system/core/healthd/healthd_mode_charger.cpp
字型路徑:
bootable/recovery/minui/graphics.cpp
bootable/recovery/minui/font_10x18.h
充電圖示和電量百分比顯示主要在函式 healthd_mode_charger_heartbeat中實現:
void healthd_mode_charger_heartbeat( )
{
struct charger *charger = &charger_state;
int64_t now = curr_time_ms();
handle_input_state(charger, now);
handle_power_supply_state(charger, now);
/* do screen update last in case any of the above want to start
* screen transitions (animations, etc)
*/
update_screen_state( charger, now);
}
battery_scale.png是由6張不同充電狀態的圖片的合成,對應狀態如下:
static struct frame batt_anim_frames[] = {
{
.disp_time = 750,
.min_capacity = 0,
.level_only = false,
.surface = NULL,
},
{
.disp_time = 750,
.min_capacity = 20,
.level_only = false,
.surface = NULL,
},
{
.disp_time = 750,
.min_capacity = 40,
.level_only = false,
.surface = NULL,
},
{
.disp_time = 750,
.min_capacity = 60,
.level_only = false,
.surface = NULL,
},
{
.disp_time = 750,
.min_capacity = 80,
.level_only = true,
.surface = NULL,
},
{
.disp_time = 750,
.min_capacity = BATTERY_FULL_THRESH,
.level_only = false,
.surface = NULL,
},
};
battery_scale.png圖片的製作
利用系統原始碼中的指令碼bootable/recovery/interlace-frames.py
,即能將battery_scale.png拆分成幾張png圖片,也可以將若干張png圖片合成一張battery_scale.png
合成圖片命令
python interlace-frames.py -o battery_scale.png battery00.png battery01.png battery02.png battery03.png battery04.png battery05.png
拆分圖片命令
python interlace-frames.py -d battery_scale.png -o battery.png
拆分後的原生關機圖片格式:位深度8,png格式 ,解析度為120x186
測試後發現位深度不限,解析度可以與螢幕解析度相同,格式為png即可,但如果遇到圖片替換後黑屏不顯示充電圖示,建議使用和原生格式一致的。
battery_scale.png使用adb匯入
adb root
adb remount
adb push battery_scale.png res/images/charger
adb reboot