2015-04-13 1 views
1

Я бы хотел добавить индикатор батареи в мое лицо для часов Pebble, что будет указывать уровень заряда батареи моих часов Pebble.Индикатор аккумуляторной батареи Pebble Watchface

Я знаю, что я мог бы получить это право, если я использовал документацию, найденную здесь: http://developer.getpebble.com/docs/c/Foundation/Event_Service/BatteryStateService/
который обеспечивает кучу пути для определения состояния батареи и Icould просто связать различные состояния с различными изображениями, которые я делаю.

Но мои вопросы:

  1. Есть ли более простой способ реализации небольшого состояния батареи на значок мой циферблата без меня создать свой собственный заряд батареи изображения.
  2. Если нет более простого способа его реализации, есть ли какие-либо небольшие значки состояния батареи , которые можно использовать вместо того, чтобы делать мои собственные изображения .

Я в основном ищу лучший способ реализовать это, так что мне не нужно терять время и энергию, изобретая колесо.

ответ

1

Вы можете использовать некоторый код, чтобы нарисовать прямоугольник внутри значка «пустой» батареи. Таким образом, у вас есть только один значок, и вы «заполняете» его в зависимости от состояния батареи.

+0

Ах, что это хороший способ сделать это слишком ... И спасает меня от того, чтобы добавить ресурсы в проект. –

1

Я проделал некоторое копание, и я обнаружил, что есть много проектов с открытым исходным кодом с значками индикации батареи для разных уровней заряда аккумулятора.

Я использую образы для каждого 10 процентного уровня (так как заряд батареи только возвращает уровень мощности с шагом 10)

Изображения хранятся в массиве GBitmap объявляются с помощью static GBitmap *battery_images[22];

включают в себя изображения в папке ресурсов и назначьте их, используя gbitmap_create_with_resource например. battery_images[2] = gbitmap_create_with_resource(RESOURCE_ID_BATTERY_20);

Размер майского массива 22, потому что я использовал уровень заряда батареи 0 - 100 и уровень зарядки 0 - 100. Вот функция handle_battery.

void handle_battery(BatteryChargeState charge_state) { 
    bitmap_layer_set_bitmap(battery_layer, battery_images[ 
    (charge_state.is_charging ? 11 : 0) + (charge_state.charge_percent/10)]); 
} 

Надеюсь, это будет полезно для всех, кто сталкивается с подобной проблемой.

1

Вы можете просто сделать один:

static Layer* s_output_layer; 

static void draw_battery(Layer *layer, GContext *ctx) { 
    graphics_context_set_stroke_color(ctx, GColorWhite); 
    graphics_context_set_fill_color(ctx, GColorWhite); 
    graphics_draw_rect(ctx, GRect(2, 0, 5, 2)); 
    graphics_draw_rect(ctx, GRect(0, 2, 9, 18)); 

    // Can't draw a 1 pixel rectangle. Use 13 to ensure 10% => 2px height 
    int gone = 13 - 0.13 * battery_state_service_peek().charge_percent; 
    if (14-gone >= 2) 
    graphics_fill_rect(ctx, GRect(2, 4+gone, 5, 14-gone), 0, GCornerNone); 
} 

void create_battery_layer(Layer *window_layer) { 
    s_output_layer = layer_create(GRect(4, 22, 9, 20)); 
    layer_add_child(window_layer, s_output_layer); 
    layer_set_update_proc(s_output_layer, draw_battery); 
} 

void destroy_battery_layer() { 
    layer_destroy(s_output_layer); 
} 
Смежные вопросы