Pebble 表盘电池指示器
Pebble Watchface Battery Indicator
我想在我的 Pebble 表盘上添加一个电池指示器,以指示我的 Pebble 手表的电池电量。
我知道如果我使用此处找到的文档,我可以做对:http://developer.getpebble.com/docs/c/Foundation/Event_Service/BatteryStateService/
它提供了一系列确定电池状态的方法,我可以 link 不同的状态和我制作的不同图像。
但是我的问题是:
- 有没有更简单的方法来实现一个小的电池状态图标
我的表盘无需创建自己的电池状态
图片。
- 如果没有更简单的实现方法,是否有任何小的
电池状态图标可以在那里使用,而不是让我的
自己的图片。
我基本上是在寻找实现它的最佳方法,这样我就不必浪费时间和精力重新发明轮子。
我进行了一些挖掘,发现有许多开源项目都带有针对不同电池电量级别的电池指示图标。
我每 10 个百分比级别使用图像(因为电池充电仅 returns 功率级别以 10 为增量)
图像存储在使用 static GBitmap *battery_images[22];
声明的 GBitmap 数组中
将图像包含在您的资源文件夹中并使用 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)]);
}
希望这对遇到类似问题的任何人有所帮助。
您可以使用一些代码在 "empty" 电池图标内绘制一个矩形。这样你只有一个图标,你 "fill" 它取决于电池状态。
你可以只画一个:
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);
}
我想在我的 Pebble 表盘上添加一个电池指示器,以指示我的 Pebble 手表的电池电量。
我知道如果我使用此处找到的文档,我可以做对:http://developer.getpebble.com/docs/c/Foundation/Event_Service/BatteryStateService/
它提供了一系列确定电池状态的方法,我可以 link 不同的状态和我制作的不同图像。
但是我的问题是:
- 有没有更简单的方法来实现一个小的电池状态图标 我的表盘无需创建自己的电池状态 图片。
- 如果没有更简单的实现方法,是否有任何小的 电池状态图标可以在那里使用,而不是让我的 自己的图片。
我基本上是在寻找实现它的最佳方法,这样我就不必浪费时间和精力重新发明轮子。
我进行了一些挖掘,发现有许多开源项目都带有针对不同电池电量级别的电池指示图标。
我每 10 个百分比级别使用图像(因为电池充电仅 returns 功率级别以 10 为增量)
图像存储在使用 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)]);
}
希望这对遇到类似问题的任何人有所帮助。
您可以使用一些代码在 "empty" 电池图标内绘制一个矩形。这样你只有一个图标,你 "fill" 它取决于电池状态。
你可以只画一个:
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);
}