- UID
- 20769
- 麦力
- 430
- 注册时间
- 2018-3-12
- 最后登录
- 2019-5-13
- 精华
- 0
- 阅读权限
- 20
- 在线时间
- 15 小时
|
本帖最后由 2454211 于 2018-3-30 11:32 编辑
最近在改表盘的显示,打算写一个有动画效果的表盘,也就是画10个尺寸一样,内容不同的位图图片,注册一个定时器,然后每秒或者每半秒调用一下回调函数,在回调函数中改变对应位置的图层图片显示。但是在所有都编译好后,打包到手表上时,有点bug。有一定的概率显示有问题,背景的那个图层有时会被覆盖掉。其他的图层却可以显示,当你用上下键切换到别的表盘,再切换回来时,又能显示了 :( 不知道哪部分代码出了问题。我的代码流程是这样的:
main(){ /*创建显示表盘窗口*/
P_Window p_window = init_window();
if (p_window != NULL)
{
g_window_id = app_window_stack_push(p_window);
/*注册一个事件通知回调,当有时间改变时,立即更新时间*/
maibu_service_sys_event_subscribe(app_watch_time_change);
}
return 0;
}
init_window(void){
/*创建一个窗口*/
p_window = app_window_create()
display_target_layer(创建背景图层)<------------< 就是这个图层有时不会显示,有时会一闪而过????
display_target_layer(创建时分图层) X 4
display_target_layer(创建秒图层) X 2
display_target_layer(创建月日图层) X4
display_target_layer(创建星期图片图层)
display_target_layer(创建电池图片图层)
display_target_layer(创建步数图层)
display_target_layer(创建高度图层)
display_target_layer(创建第一个动画图层)
display_target_layer(创建第二个动画图层)
//共17个图层,没有超过20个
app_window_timer_subscribe(p_window, 1000, sec_callback, NULL)/*定义一个窗口定时器,用于秒表显示*/
app_service_timer_subscribe(200, sec_callback2, NULL);//使用定时服务,用于显示动画效果。<------------< 如果我有多个时间间隔不一致的图层需要使用,使用这些时间回调函数有什么需要注意的?或者有什么别的方法可以使用?
return p_window;
}
//sec_callback2和sec_callback内代码结构基本一致
sec_callback2(date_time_t tick_time, uint32_t millis,void *context){
/////定义一些变量及需要的结构体
.
.
.
/*根据窗口ID获取窗口句柄*/
p_window = app_window_stack_get_window_by_id(g_window_id);
if (p_window == NULL) return;
p_layer = app_window_get_layer_by_id(p_window, g_layer_skull_id);
if (p_layer != NULL){
res_get_user_bitmap(get_skull_icon[g_skull_num], &bitmap);
app_layer_set_bitmap_bitmap(p_layer, &bitmap);
g_skull_num++;
}
p_layer2 = app_window_get_layer_by_id(p_window, g_layer_effects_id);
if(p_layer2 != NULL){
res_get_user_bitmap(get_effects_icon[g_effects_num], &bitmap2);
app_layer_set_bitmap_bitmap(p_layer2, &bitmap2);
g_effects_num++;
}
/*窗口显示*/
app_window_update(p_window);
}
app_watch_time_change(enum SysEventType type, void *context)
{ /*时间更改*/
if (type == SysEventTypeTimeChange)
{ app_watch_data(0);
window_reloading();
}
}
|
|