手表下拉设置页面跳转

269 阅读2分钟

以下内容是自己在学习这个手表开发中的记录,方便以后查看

貌似是 手表的下拉界面 对应 代码的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

image.png 然后到代码中通过全局查找找到对应的

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的部分是我自己尝试着添加的。

image.png 自己根据代码推断是:当点击设置按钮时,如果想要跳转到某个界面的话,就通过view_stack_push_view函数某个视图参数放进去(蓝色框中的内容),这里具体视图具体分析。