以下内容是自己在学习这个手表开发中的记录,方便以后查看
貌似是 手表的下拉界面 对应 代码的launcher\main_view.c
大概处理思路
之前一直像无头苍蝇一样在看炬芯的开发文档,后来实在是看不懂+看不下去,就想去修改代码看看。文档ATS手表界面样例中展示了点击设置界面可以展示切换语言和设置闹钟。
然后自己的想法是先去手表UI(使用炬芯的UI-Editor打开bt_watch.ui)中找到对应的按钮位置,再去代码中找对应的点击事件,然后参考别的代码实现如何跳转。
D:\炬芯\炬芯\炬芯\Code\SDK-TAG_ZS308B_2700_240516\SDK-TAG_ZS308B_2700_240516\application\bt_watch\resource\466x466\bt_watch.ui
然后到代码中通过全局查找找到对应的
const static uint32_t _btn_def_ids[] = {
PIC_WEATHER,
PIC_BRIGHTNESS,
PIC_BLUETOOTH,
PIC_VIBRATOR,
PIC_GLASS,
PIC_SETTING, // 在这里
};
const static uint32_t _btn_sel_ids[] = {
PIC_WEATHER_H,
PIC_BRIGHTNESS_H,
PIC_BLUETOOTH_H,
PIC_VIBRATOR_H,
PIC_GLASS_H,
PIC_SETTING_H,
};
再然后修改_btn_evt_handler中的内容,这是一个事件处理函数,关于按钮的点击事件也在这里
// 事件处理函数
static void _btn_evt_handler(lv_event_t *e)
{
lv_event_code_t event = lv_event_get_code(e);
int idx = (int)lv_event_get_user_data(e);
if (event == LV_EVENT_CLICKED)
{
SYS_LOG_INF("Btn[%d] Clicked \n", idx);
#ifdef CONFIG_CAT1_APP
SYS_LOG_INF("cmy======= Btn[%d] Clicked\n", idx); // cmy test log
if (idx == BTN_SETTING)
{
SYS_LOG_INF("cmy==== you click btn BTN_SETTING\n"); // cmy test log
view_stack_push_view(SIM_MENU_VIEW, NULL);
}
#endif
switch (idx)
{
case BTN_WEATHER:
// Handle weather button click
SYS_LOG_ERR("cmy==== you click btn BTN_WEATHER\n");
break;
case BTN_BRIGHTNESS:
// Handle brightness button click
SYS_LOG_ERR("cmy==== you click btn BTN_BRIGHTNESS\n");
break;
case BTN_BLUETOOTH:
// Handle bluetooth button click
SYS_LOG_ERR("cmy==== you click btn BTN_BLUETOOTH\n");
break;
case BTN_VIBRATOR:
// Handle vibrator button click
SYS_LOG_ERR("cmy==== you click btn BTN_VIBRATOR\n");
break;
case BTN_GLASS:
// Handle glass button click
SYS_LOG_ERR("cmy==== you click btn BTN_GLASS\n");
break;
case BTN_SETTING:
// Handle setting button click
SYS_LOG_ERR("cmy==== you click btn BTN_SETTING\n");
view_stack_push_view(ALARM_SET_VIEW, NULL);
break;
default:
break;
}
}
else if (event == LV_EVENT_VALUE_CHANGED)
{
SYS_LOG_INF("Btn[%d] Toggled\n", idx);
if (idx == BTN_BRIGHTNESS)
{
// screen always on
p_sysview_data->btn_sta[idx] = !p_sysview_data->btn_sta[idx];
#ifdef CONFIG_SYS_WAKELOCK
if (p_sysview_data->btn_sta[BTN_BRIGHTNESS])
{
sys_wake_lock(FULL_WAKE_LOCK);
}
else
{
sys_wake_unlock(FULL_WAKE_LOCK);
}
#endif
}
}
}
代码中关于switch的部分是我自己尝试着添加的。
自己根据代码推断是:当点击设置按钮时,如果想要跳转到某个界面的话,就通过
view_stack_push_view函数某个视图参数放进去(蓝色框中的内容),这里具体视图具体分析。