1. 程式人生 > 其它 >Android系統自定義關機充電圖示

Android系統自定義關機充電圖示

技術標籤: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

附件工具

XnConvert——批量轉換圖片位深度工具