LVGL 8.x 触摸屏下对图片按钮的处理方法
在LVGL中,图片按钮较为特殊,其除了lv_obj通用的state(lv_state_t)属性外,还具有imgbtn state(lv_imgbtn_state_t),两个状态相互独立,后者主要是用于在按钮事件状态切换后,能够自动的切换图片源。
由于触摸屏的特殊性,不能像一般按钮一样,人为单步设置当前按键的状态(单次触摸一定伴随着press及release事件),所以无法使用内置的LV_IMGBTN_STATE_PRESSED和LV_IMGBTN_STATE_RELEASED来实现按钮图片的自动切换,需要在事件回调处理函数中手动修改。
在常用的按钮状态切换中,一般包含两种情况:1、单态按钮,即点击按钮时,按钮变为选中状态,显示图片1,当点按钮外其他地方时,按钮失去选中状态,显示图片2;2、双态按钮,即点击一下按钮,显示图片1,再点击一下按钮,显示图片2。
对于第一种情况,需要在事件回调处理函数中判断LV_EVENT_CLICKED及LV_EVENT_DEFOCUSED两种事件,当发生LV_EVENT_CLICKED事件时,可以手动(lv_imgbtn_set_state)将图片按钮状态修改,例如LV_IMGBTN_STATE_PRESSED(需提前配置好LV_IMGBTN_STATE_PRESSED对应的图片),点击完成后会自动完成图片的切换,如果还想增加中间过程的过度效果,则可以增加用户自定义的状态进行处理。
如果是希望图片按钮的状态仅在设定的几个按钮中进行切换,则只能仅处理LV_EVENT_CLICKED事件,然后在事件处理业务内部,去修改其他几个图片按钮的状态。
对于第二种情况,需要在图片按钮初始化时增加LV_OBJ_FLAG_CHECKABLE属性(lv_obj_add_flag(obj, LV_OBJ_FLAG_CHECKABLE)),然后在LV_EVENT_CLICKED事件中,判断当前是否具有LV_STATE_CHECKED状态(lv_obj_has_state(const lv_obj_t * obj, lv_state_t state)),然后再修改图片按钮的状态,即可完成按钮图片的切换。

浙公网安备 33010602011771号