页面快速左右滑动卡停补丁
📎 原始文档:https://www.kdocs.cn/l/clgcchJzBASc 页面快速左右滑动卡停补丁
现象描述:
在手电筒界面快速左右滑动时,可能会最终停在手电筒相邻的左右页面中并卡住不动,此时按键灭屏,锁屏,充电界面均正常,只有主循环页面无法左右滑动。
适用范围:
适用于彩屏仓v101版本sdk。
问题产生原因:
手电筒页面,打开灯光后会禁止页面滑动,关闭灯光后恢复滑动,但极端测试手法的情况下,如频繁快速滑动,可能会导致lvgl的消息没及时处理过来,等到手电筒切到左右两个页面后再触发禁止页面滑动,然而此时由于页面已经发生切换,没有对应的恢复滑动按钮,导致页面卡住而cpu还在跑的情况。
修改方式:
添加lv_tileview_scrollable_update函数定义,并将该函数添加到lv_all_status_update中调用即可。
// tileview滚动使能更新
void lv_tileview_scrollable_update()
{
lv_obj_t *cur_page = lv_tileview_get_tile_act(guider_ui.screen_loop_tileview_loop);
// 若当前页面不是手电筒页面且当前页面不为空则恢复滚动
if(cur_page != guider_ui.screen_loop_tileview_loop_light && cur_page != NULL){
lv_obj_add_flag(guider_ui.screen_loop_tileview_loop, LV_OBJ_FLAG_SCROLLABLE); // 取消滚动
}
}
void lv_all_status_update()
{
lv_battery_status_update();
lv_vloume_status_update();
lv_time_status_update();
// lv_eq_status_update();
// lv_anc_status_update();
// 闹钟状态更新
lv_alarm_status_update();
lv_music_status_update();
lv_backlight_status_update();
// 蓝牙状态最后更新
lv_ble_status_update();
lv_bt_status_update();
// 是否在充电
lv_charging_status_update();
lv_call_status_update();
// 是否需要设置滚动
lv_tileview_scrollable_update();
}
一种比较简单的方式是直接在主定时器循环中轮询当前页面值,如果不是手电筒界面则恢复页面滑动,若有其他页面需要禁止滑动,可以根据需求重写lv_tileview_scrollable_update函数,也可以在切换到手电筒左右相邻两个页面时接触页面滑动。