Lvgl的roller控件点击位置向上偏移的问题

在操作中发现,点击[↓]时,在文字显示区域有效,点击中间的文字偏下一点点仍触发[↓]的效果
[↑]时,点击文字的位置没效果,点击文字偏上才有效

1 怀疑是roller控件的封装问题

在虚拟机跑roller例子,发现点击区域偏移情况如下图
如果将该控件通过函数text_line_space()扩大文字的高度,那么他们的偏移区域更加明显


从图上可以知道,向上偏移大约为,roller选项高度的三分之一
应该是DecemberJanuary距离的一半
现在需要想办法获取roller控件文字垂直距离(多少行距?)

2 找一下文档

查看文档的Text properties小节

3 程序修改

// 文字字体的大小的高度
int16_t text_font_height = lv_font_get_line_height(lv_obj_get_style_text_font(roller, LV_ROLLER_PART_BG));// 字符的垂直距离
int16_t text_line_space = lv_obj_get_style_text_line_space(roller, LV_ROLLER_PART_BG);

改这个lvgl\src\lv_widgets\lv_roller.c里面的release_handler函数
只修改13 14 行 其他的不变

static lv_res_t release_handler(lv_obj_t * roller)
{······// 看到函数判断的那一部分if(lv_indev_get_type(indev) == LV_INDEV_TYPE_POINTER || lv_indev_get_type(indev) == LV_INDEV_TYPE_BUTTON) {/*Search the clicked option (For KEYPAD and ENCODER the new value should be already set)*/uint16_t new_opt  = 0;lv_point_t p;lv_indev_get_point(indev, &p);// 获取行距int16_t height = lv_obj_get_style_text_line_space(roller, LV_ROLLER_PART_BG)/2;p.y -= label->coords.y1 + height;p.x -= label->coords.x1;uint32_t letter_i;letter_i = lv_label_get_letter_on(label, &p);const char * txt  = lv_label_get_text(label);uint32_t i        = 0;uint32_t i_prev   = 0;uint32_t letter_cnt = 0;for(letter_cnt = 0; letter_cnt < letter_i; letter_cnt++) {uint32_t letter = _lv_txt_encoded_next(txt, &i);/*Count he lines to reach the clicked letter. But ignore the last '\n' because it* still belongs to the clicked line*/if(letter == '\n' && i_prev != letter_i) new_opt++;i_prev = i;}lv_roller_set_selected(roller, new_opt, LV_ANIM_ON);}
}

4 验证

void modifyRollerTest(void)
{lv_obj_t *roller1 = lv_roller_create(lv_scr_act(), NULL);lv_roller_set_options(roller1,"January\n""February\n""March\n""April\n""May\n""June\n""July\n""August\n""September\n""October\n""November\n""December",LV_ROLLER_MODE_INFINITE);lv_obj_set_style_local_text_line_space(roller1, LV_ROLLER_PART_BG, LV_STATE_DEFAULT, 60);lv_roller_set_visible_row_count(roller1, 4);lv_obj_align(roller1, NULL, LV_ALIGN_CENTER, -120, 0);lv_obj_t *roller3 = lv_roller_create(lv_scr_act(), NULL);lv_roller_set_options(roller3, "roller3", LV_ROLLER_MODE_INFINITE);lv_obj_set_style_local_text_font(roller3, LV_ROLLER_PART_BG, LV_STATE_DEFAULT, &lv_font_montserrat_28);lv_roller_set_visible_row_count(roller3, 3);lv_obj_align(roller3, NULL, LV_ALIGN_CENTER, 120, 0);
}

运行后再点击相应位置,文章开头提到的偏移情况已经没有了

修复Lvgl的roller控件点击位置向上偏移的问题相关推荐

  1. Android控件点击圆形阴影反馈解决方案

    Android控件点击圆形阴影反馈解决方案 愿景 对于手机App而言,没有反馈效果的按钮使用体验是不舒服的.最近在深入学习Material Design,对其中的ripple效果比较感兴趣.我想着尝试 ...

  2. 【前端】layui日期控件点击一闪而过解决方法

    [前端]layui日期控件点击一闪而过解决方法 参考文章: (1)[前端]layui日期控件点击一闪而过解决方法 (2)https://www.cnblogs.com/nb123/p/12159683 ...

  3. mysql读出来的日期后面多了个 .0处理及layui中日期控件点击一闪而过处理

    1.mysql数据库中表的字段类型datetime 2.java中显示的字段是 java.util.Date 如果sql不做处理的话,显示.0 解决:sql中对日期格式化处理 DATE_FORMAT( ...

  4. appim自动化--点击指定控件的指定位置

    终于有意识的把代码块封装起来了,首次给自个赞个:) 点击指定控件的指定位置,要用到枚举-- package appiumtest; import java.net.URL;import io.appi ...

  5. 2023-02-24 Android app java 模拟控件点击事件,使用performClick方法去实现

    一.Android app java 模拟控件点击事件,使用performClick方法去实现. 二.实际使用 private TextView m_bt_connect ;m_bt_connect ...

  6. wpf中ListView控件点击列头排序功能实现(超简洁实用)

    .xaml文件中的主要代码 <ListView Name="lvMeasureData" GridViewColumnHeader.Click="Sort_Clic ...

  7. GUI一灯大师,LVGL『LED控件』介绍

    一. LVGL GUI LED控件的概念 LED 是矩形(或圆形)的对象.它的亮度可以调节.亮度降低时,LED 的颜色会变暗. 二. LVGL GUI LED小部件和样式 LED 只有一个主要部分,称 ...

  8. JS 获取控件的绝对位置

    JS 获取控件的绝对位置 js获取控件的绝对位置 已经控件宽度和高度 2010-08-11 13:07 //获取控件左绝对位置 function getAbsoluteLeft(objectId) { ...

  9. Visual C++——获取屏幕大小、窗口大小、对话框大小和位置、控件大小和位置

    解决方案 获取屏幕大小 //下边两个函数获取的是显示屏幕的大小,但不包括任务栏等区域int cx = GetSystemMetrics(SM_CXFULLSCREEN); int cy = GetSy ...

  10. silverlight 得到 控件 鼠标 的位置

    //控件的绝对位置 TreeView tr = (TreeView)sender; GeneralTransform generalTransform = tr.TransformToVisual(n ...

最新文章

  1. Android各版本新特性
  2. git add 回滚_Git的reset命令详解
  3. 禁止微信下拉 露出黑色背景
  4. SUSE11sp3 perf工具安装过程
  5. 2008秋-计算机软件基础- 实验一 参考源程序
  6. MySQL函数大全 及用法示例
  7. yolov3训练自己的数据_YOLOv4 训练自己的数据集
  8. vtune mysql user_intel vtune 介绍、安装和使用
  9. Redis的基础事务
  10. 盘点 Python 高手都写不出来的几个错误
  11. python网课阿里云_阿里云大牛用过的680集Python视频教程无偿分享,学完万物皆可爬...
  12. 当你感到迷茫焦虑时,请听听白岩松这个演讲
  13. java jdk1.5_jdk1.5 64位官方下载
  14. NHOI2019总结
  15. UE4(虚幻4) 教学网站等资源推荐
  16. xp谷歌浏览器时间快了_Win7系统零日漏洞曝光,谷歌建议:升级Windows 10
  17. python直角坐标转极坐标_Python在OpenCV里实现极坐标变换功能
  18. 检测到远端X服务正在运行中
  19. numpy array 增加一列(行)
  20. NOJ1149 旅游预算(动态规划)

热门文章

  1. Excel 制作甘特图(多图)
  2. Xshell正版免费,再也不用找破解版了!
  3. IPMI 1:ipmi简介
  4. matlab dbc文件,一种EXCEL转DBC文件的生成方法及装置与流程
  5. 简单的网页编辑器js代码
  6. vscode配置Git管理工具GitLens
  7. 简单实现虚拟机备份上云
  8. 关于ITIL4 认证你必须了解的知识
  9. 涡CFTurbo 10.2.6 2017泵轮涡旋式机械设计
  10. 【DSP】win10安装CCS5.5教程及报错解决方法