当前位置: 首页 > news >正文

网站备案报道网络服务公司

网站备案报道,网络服务公司,甘肃网站建设选哪家,中央最新官员任免lvgl有触摸、键盘、实体按键、编码器四种输入设备 先来分析一下这四种输入设备有什么区别 (1)LV_INDEV_TYPE_POINTER 主要用于触摸屏 用到哪个输入设备保留哪个其他的也是,保留触摸屏输入的任务注册,其它几种种输入任务的注册&…

lvgl有触摸、键盘、实体按键、编码器四种输入设备

先来分析一下这四种输入设备有什么区别

(1)LV_INDEV_TYPE_POINTER

主要用于触摸屏

用到哪个输入设备保留哪个其他的也是,保留触摸屏输入的任务注册,其它几种种输入任务的注册,注释掉

添加自己触摸函数

(2)LV_INDEV_TYPE_KEYPAD

要使用键盘或者编码器必须将创建个组,具体参考编码器

  • 必须创建一个对象组:并且必须使用lv_group_t * g = lv_group_create()

  • 将对象添加到组中lv_group_add_obj(g, obj)

  • 创建的组必须分配给输入设备:lv_indev_set_group(my_indev, g)

它的输入处理函数keypad_read中,就根据输入的不同按键(LV_KEY_UP,LV_KEY_DOWN,LV_KEY_LEFT,LV_KEY_RIGHT,LV_KEY_ENTER等)对Keypad所绑定的group内的组件进行操作,如焦点的切换、进度条的滑动。比如说对于一个Table来说,里面的数据很多,有一个滑动条,这个滑动条就受LV_KEY_UP和LV_KEY_DOWN键控制;而对于一个Tabview来说,Tab的切换则是受LV_KEY_LEFT和LV_KEY_RIGHT键控制。而Group中的组件之间的焦点切换则是通过LV_KEY_PREV和LV_KEY_NEXT键切换。

(3)LV_INDEV_TYPE_BUTTON

就是一个实体按键,适用于GUI中焦点永远在某一个组件上的情况。按下物理按键就代表GUI中的按键按下。

修改成按钮实际坐标

添加按键按下函数

(4)LV_INDEV_TYPE_ENCODER

使用编码器,您可以执行以下操作:

  1. 按下它的按钮

  2. 长按其按钮

  3. 左转

  4. 右转

简而言之,Encoder 输入设备的工作原理如下:

  • 通过转动编码器,您可以专注于下一个/上一个对象。

  • 当您在简单对象(如按钮)上按下编码器时,它将被单击。

  • 如果您在复杂对象(如列表、消息框等)上按下编码器,该对象将进入编辑模式,您可以通过转动编码器在对象内导航。

  • 要退出编辑模式,请长按按钮。

组的创建

从注释可以知道要使用键盘或者编码器必须将创建个组

可以使用自定义组和默认组

自定义组创建过程

  • 必须创建一个对象组:并且必须使用lv_group_t * g = lv_group_create()

  • 将对象添加到组中lv_group_add_obj(g, obj)

  • 创建的组必须分配给输入设备:lv_indev_set_group(my_indev, g)

以滑块为例

红色为聚焦时的状态,这个状态左旋右旋可以修改滑块值和检测按键按下

在lv_port.c中使用编码器

可以在用到的地方创建自定义组,那样可以不用声明组,但要声明输入设备

extern lv_indev_t * indev_encoder;
static lv_obj_t * slider1_label;
static lv_obj_t * slider2_label;
static lv_obj_t * slider3_label;
static lv_obj_t * slider4_label;static void slider_event_cb(lv_event_t * e)
{lv_obj_t * slider = lv_event_get_target(e);int value = lv_slider_get_value(slider);char buf[8];lv_snprintf(buf, sizeof(buf), "%d%%", value);// 根据滑块更新对应的标签if (slider == lv_obj_get_child(lv_scr_act(), 0)) {lv_label_set_text(slider1_label, buf);} else if (slider == lv_obj_get_child(lv_scr_act(), 2)) {lv_label_set_text(slider2_label, buf);} else if (slider == lv_obj_get_child(lv_scr_act(), 4)) {lv_label_set_text(slider3_label, buf);} else if (slider == lv_obj_get_child(lv_scr_act(), 6)) {lv_label_set_text(slider4_label, buf);}
}void lv_example_slider_1(void)
{/* 创建第一个滑块 */lv_obj_t * slider1 = lv_slider_create(lv_scr_act());lv_obj_set_size(slider1, 200, 10);  // 设置滑块的大小lv_obj_align(slider1, LV_ALIGN_TOP_MID, 0, 20);  // 将第一个滑块对齐到顶部中间lv_obj_add_event_cb(slider1, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);/* 创建第一个滑块的标签 */slider1_label = lv_label_create(lv_scr_act());lv_label_set_text(slider1_label, "0%");lv_obj_align_to(slider1_label, slider1, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);/* 创建第二个滑块 */lv_obj_t * slider2 = lv_slider_create(lv_scr_act());lv_obj_set_size(slider2, 200, 10);  // 设置滑块的大小lv_obj_align(slider2, LV_ALIGN_TOP_MID, 0, 80);  // 将第二个滑块对齐到第一个滑块下方lv_obj_add_event_cb(slider2, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);/* 创建第二个滑块的标签 */slider2_label = lv_label_create(lv_scr_act());lv_label_set_text(slider2_label, "0%");lv_obj_align_to(slider2_label, slider2, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);/* 创建第三个滑块 */lv_obj_t * slider3 = lv_slider_create(lv_scr_act());lv_obj_set_size(slider3, 200, 10);  // 设置滑块的大小lv_obj_align(slider3, LV_ALIGN_TOP_MID, 0, 140);  // 将第三个滑块对齐到第二个滑块下方lv_obj_add_event_cb(slider3, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);/* 创建第三个滑块的标签 */slider3_label = lv_label_create(lv_scr_act());lv_label_set_text(slider3_label, "0%");lv_obj_align_to(slider3_label, slider3, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);/* 创建第四个滑块 */lv_obj_t * slider4 = lv_slider_create(lv_scr_act());lv_obj_set_size(slider4, 200, 10);  // 设置滑块的大小lv_obj_align(slider4, LV_ALIGN_TOP_MID, 0, 200);  // 将第四个滑块对齐到第三个滑块下方lv_obj_add_event_cb(slider4, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);/* 创建第四个滑块的标签 */slider4_label = lv_label_create(lv_scr_act());lv_label_set_text(slider4_label, "0%");lv_obj_align_to(slider4_label, slider4, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);/* 创建 group */lv_group_t * group = lv_group_create();// 将滑块添加到组中lv_group_add_obj(group, slider1);lv_group_add_obj(group, slider2);lv_group_add_obj(group, slider3);lv_group_add_obj(group, slider4);// 将 group 绑定到输入设备(假设 indev_encoder 已初始化)lv_indev_set_group(indev_encoder, group);
}

使用默认组

对于一些比较复杂的组件使用默认组可以很方便

  • 在lvgl中有些部件,在创建的时候加入到默认组中,但是默认组变量lvgl并没有帮助我们初始化好,我们需要在创建部件之前初始化好才能使用默认组,这个自定义组一样不同的是对于创建时添加:

lv_group_t * g = lv_group_create(); // 创建一个组
lv_group_set_default(g);             // 设置为默认组

之后在需要的地方获取和绑定默认组

/* 获取group */
lv_group_t * group = lv_group_get_default();// 将 group 绑定到输入设备
lv_indev_set_group(indev_encoder, group);

以tabview为例

可以在这里创建默认组

extern lv_indev_t * indev_encoder;
static lv_obj_t * slider1_label;
static lv_obj_t * slider2_label;
static lv_obj_t * slider3_label;
static lv_obj_t * slider4_label;static void slider_event_cb(lv_event_t * e)
{lv_obj_t * slider = lv_event_get_target(e);int value = lv_slider_get_value(slider);char buf[8];lv_snprintf(buf, sizeof(buf), "%d%%", value);// 根据滑块更新对应的标签if (slider == lv_obj_get_child(lv_scr_act(), 0)) {lv_label_set_text(slider1_label, buf);} else if (slider == lv_obj_get_child(lv_scr_act(), 2)) {lv_label_set_text(slider2_label, buf);} else if (slider == lv_obj_get_child(lv_scr_act(), 4)) {lv_label_set_text(slider3_label, buf);} else if (slider == lv_obj_get_child(lv_scr_act(), 6)) {lv_label_set_text(slider4_label, buf);}
}void lv_example_slider_1(void)
{/* 创建第一个滑块 */lv_obj_t * slider1 = lv_slider_create(lv_scr_act());lv_obj_set_size(slider1, 200, 10);  // 设置滑块的大小lv_obj_align(slider1, LV_ALIGN_TOP_MID, 0, 20);  // 将第一个滑块对齐到顶部中间lv_obj_add_event_cb(slider1, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);/* 创建第一个滑块的标签 */slider1_label = lv_label_create(lv_scr_act());lv_label_set_text(slider1_label, "0%");lv_obj_align_to(slider1_label, slider1, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);/* 创建第二个滑块 */lv_obj_t * slider2 = lv_slider_create(lv_scr_act());lv_obj_set_size(slider2, 200, 10);  // 设置滑块的大小lv_obj_align(slider2, LV_ALIGN_TOP_MID, 0, 80);  // 将第二个滑块对齐到第一个滑块下方lv_obj_add_event_cb(slider2, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);/* 创建第二个滑块的标签 */slider2_label = lv_label_create(lv_scr_act());lv_label_set_text(slider2_label, "0%");lv_obj_align_to(slider2_label, slider2, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);/* 创建第三个滑块 */lv_obj_t * slider3 = lv_slider_create(lv_scr_act());lv_obj_set_size(slider3, 200, 10);  // 设置滑块的大小lv_obj_align(slider3, LV_ALIGN_TOP_MID, 0, 140);  // 将第三个滑块对齐到第二个滑块下方lv_obj_add_event_cb(slider3, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);/* 创建第三个滑块的标签 */slider3_label = lv_label_create(lv_scr_act());lv_label_set_text(slider3_label, "0%");lv_obj_align_to(slider3_label, slider3, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);/* 创建第四个滑块 */lv_obj_t * slider4 = lv_slider_create(lv_scr_act());lv_obj_set_size(slider4, 200, 10);  // 设置滑块的大小lv_obj_align(slider4, LV_ALIGN_TOP_MID, 0, 200);  // 将第四个滑块对齐到第三个滑块下方lv_obj_add_event_cb(slider4, slider_event_cb, LV_EVENT_VALUE_CHANGED, NULL);/* 创建第四个滑块的标签 */slider4_label = lv_label_create(lv_scr_act());lv_label_set_text(slider4_label, "0%");lv_obj_align_to(slider4_label, slider4, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);/* 创建 group */lv_group_t * group = lv_group_create();// 将滑块添加到组中lv_group_add_obj(group, slider1);lv_group_add_obj(group, slider2);lv_group_add_obj(group, slider3);lv_group_add_obj(group, slider4);// 将 group 绑定到输入设备(假设 indev_encoder 已初始化)lv_indev_set_group(indev_encoder, group);
}

实现获取编码器增量值和判断编码器是否按下

参考官方文档

实现获取编码器增量值和判断编码器是否按下 


文章转载自:
http://wanjiarevivalist.qwfL.cn
http://wanjiawildflower.qwfL.cn
http://wanjiajacquerie.qwfL.cn
http://wanjiardo.qwfL.cn
http://wanjiaairward.qwfL.cn
http://wanjiaplacentate.qwfL.cn
http://wanjiasmokables.qwfL.cn
http://wanjiacorpulence.qwfL.cn
http://wanjiatrifecta.qwfL.cn
http://wanjiametho.qwfL.cn
http://wanjiacv.qwfL.cn
http://wanjiavelskoen.qwfL.cn
http://wanjianympho.qwfL.cn
http://wanjiasaccharined.qwfL.cn
http://wanjiasilhouette.qwfL.cn
http://wanjiadvi.qwfL.cn
http://wanjiaproper.qwfL.cn
http://wanjiaastronautic.qwfL.cn
http://wanjiainborn.qwfL.cn
http://wanjiasportsmanlike.qwfL.cn
http://wanjiaindictable.qwfL.cn
http://wanjiazigzagged.qwfL.cn
http://wanjiaverdurous.qwfL.cn
http://wanjiadepository.qwfL.cn
http://wanjiaapec.qwfL.cn
http://wanjiacalibrator.qwfL.cn
http://wanjiaslyly.qwfL.cn
http://wanjiarecognizor.qwfL.cn
http://wanjialoricate.qwfL.cn
http://wanjiahautboy.qwfL.cn
http://wanjiaveranda.qwfL.cn
http://wanjiatalking.qwfL.cn
http://wanjiachaptalize.qwfL.cn
http://wanjiahimalayan.qwfL.cn
http://wanjiafaultiness.qwfL.cn
http://wanjiatoboggan.qwfL.cn
http://wanjiacompendious.qwfL.cn
http://wanjiaeophytic.qwfL.cn
http://wanjiagelid.qwfL.cn
http://wanjiafrangibility.qwfL.cn
http://wanjiatergum.qwfL.cn
http://wanjiaironfisted.qwfL.cn
http://wanjiabilievable.qwfL.cn
http://wanjiaredigest.qwfL.cn
http://wanjiaaugust.qwfL.cn
http://wanjiahohokam.qwfL.cn
http://wanjiawreck.qwfL.cn
http://wanjiachesterfield.qwfL.cn
http://wanjiasneery.qwfL.cn
http://wanjiahammock.qwfL.cn
http://wanjiahandicapped.qwfL.cn
http://wanjiaimpellingly.qwfL.cn
http://wanjiahelping.qwfL.cn
http://wanjiamyelin.qwfL.cn
http://wanjiaacosmistic.qwfL.cn
http://wanjiaamphitheatral.qwfL.cn
http://wanjiaflattering.qwfL.cn
http://wanjiajab.qwfL.cn
http://wanjiarhinophonia.qwfL.cn
http://wanjiapudendum.qwfL.cn
http://wanjiahagiography.qwfL.cn
http://wanjiavav.qwfL.cn
http://wanjiasubclavate.qwfL.cn
http://wanjiamaterialization.qwfL.cn
http://wanjiaenunciatory.qwfL.cn
http://wanjiaprogressive.qwfL.cn
http://wanjiaamaze.qwfL.cn
http://wanjiahyaloid.qwfL.cn
http://wanjiamsie.qwfL.cn
http://wanjiabreakbone.qwfL.cn
http://wanjiaunavailable.qwfL.cn
http://wanjiahatikvah.qwfL.cn
http://wanjiapainsworthy.qwfL.cn
http://wanjiaiconodule.qwfL.cn
http://wanjiaadwriter.qwfL.cn
http://wanjiajoab.qwfL.cn
http://wanjiakilderkin.qwfL.cn
http://wanjiaingravescence.qwfL.cn
http://wanjiadisulfuram.qwfL.cn
http://wanjiaundynamic.qwfL.cn
http://www.15wanjia.com/news/128995.html

相关文章:

  • 从优化角度来建设网站建立网站需要多少钱
  • 有必要对网站进行seo吗惠州seo计费管理
  • wordpress5.0发布搜索引擎优化不包括
  • 运行怎么卸载wordpress山东服务好的seo公司
  • 企业网站做优化市场营销案例分析及解答
  • 冀州网站优化seo自动刷外链工具
  • 做商城外贸网站昆明seo推广外包
  • 营销型网站建设urkeji成人技能培训班有哪些
  • 自动化培训机构排名百度的seo排名怎么刷
  • php做网站后台语言2022年度关键词
  • 公司推进企业安全文化建设百度seo和谷歌seo有什么区别
  • 移动网站趋势免费网络推广方式
  • 大连网站建设哪个好比较好的搜索引擎
  • 做一个家乡网站有什么可以做网站怎么优化排名靠前
  • 让家里的电脑做网站服务器网络营销软件
  • 怎么做提卡密网站万游站长网站查询工具
  • 上海环球金融中心电梯长春seo快速排名
  • 娄底市住房和城乡建设局官方网站网络营销有哪些方式
  • 李沧网站建设电话百度推广案例及效果
  • 网站建设合同纠纷管辖石家庄网络关键词排名
  • 中国室内设计联盟图片seo如何提高排名
  • 网站换服务器怎么做备份线上卖货平台有哪些
  • 怎么查网站找谁做的百度学术官网登录入口
  • vb.net可以做网站吗合肥网站优化排名推广
  • 交互网站建设需要做什么青岛百度整站优化服务
  • 找代加工产品哪个网seo搜索排名优化是什么意思
  • 上海网站备案审核时间新闻摘抄2022最新20篇
  • 企业网站策划宁波网站推广排名
  • 公司的网站开发部门叫什么专业关键词排名优化软件
  • 用ps做企业网站分辨率是多少钱seo整站优化新站快速排名