修复Lvgl的roller控件点击位置向上偏移的问题
Lvgl的roller控件点击位置向上偏移的问题
在操作中发现,点击[↓]
时,在文字显示区域有效,点击中间的文字偏下一点点仍触发[↓]
的效果
而[↑]
时,点击文字的位置没效果,点击文字偏上才有效
1 怀疑是roller控件的封装问题
在虚拟机跑roller例子,发现点击区域偏移情况如下图
如果将该控件通过函数text_line_space()
扩大文字的高度,那么他们的偏移区域更加明显
从图上可以知道,向上偏移大约为,roller
选项高度的三分之一
应该是December
与January
距离的一半
现在需要想办法获取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控件点击位置向上偏移的问题相关推荐
- Android控件点击圆形阴影反馈解决方案
Android控件点击圆形阴影反馈解决方案 愿景 对于手机App而言,没有反馈效果的按钮使用体验是不舒服的.最近在深入学习Material Design,对其中的ripple效果比较感兴趣.我想着尝试 ...
- 【前端】layui日期控件点击一闪而过解决方法
[前端]layui日期控件点击一闪而过解决方法 参考文章: (1)[前端]layui日期控件点击一闪而过解决方法 (2)https://www.cnblogs.com/nb123/p/12159683 ...
- mysql读出来的日期后面多了个 .0处理及layui中日期控件点击一闪而过处理
1.mysql数据库中表的字段类型datetime 2.java中显示的字段是 java.util.Date 如果sql不做处理的话,显示.0 解决:sql中对日期格式化处理 DATE_FORMAT( ...
- appim自动化--点击指定控件的指定位置
终于有意识的把代码块封装起来了,首次给自个赞个:) 点击指定控件的指定位置,要用到枚举-- package appiumtest; import java.net.URL;import io.appi ...
- 2023-02-24 Android app java 模拟控件点击事件,使用performClick方法去实现
一.Android app java 模拟控件点击事件,使用performClick方法去实现. 二.实际使用 private TextView m_bt_connect ;m_bt_connect ...
- wpf中ListView控件点击列头排序功能实现(超简洁实用)
.xaml文件中的主要代码 <ListView Name="lvMeasureData" GridViewColumnHeader.Click="Sort_Clic ...
- GUI一灯大师,LVGL『LED控件』介绍
一. LVGL GUI LED控件的概念 LED 是矩形(或圆形)的对象.它的亮度可以调节.亮度降低时,LED 的颜色会变暗. 二. LVGL GUI LED小部件和样式 LED 只有一个主要部分,称 ...
- JS 获取控件的绝对位置
JS 获取控件的绝对位置 js获取控件的绝对位置 已经控件宽度和高度 2010-08-11 13:07 //获取控件左绝对位置 function getAbsoluteLeft(objectId) { ...
- Visual C++——获取屏幕大小、窗口大小、对话框大小和位置、控件大小和位置
解决方案 获取屏幕大小 //下边两个函数获取的是显示屏幕的大小,但不包括任务栏等区域int cx = GetSystemMetrics(SM_CXFULLSCREEN); int cy = GetSy ...
- silverlight 得到 控件 鼠标 的位置
//控件的绝对位置 TreeView tr = (TreeView)sender; GeneralTransform generalTransform = tr.TransformToVisual(n ...
最新文章
- Android各版本新特性
- git add 回滚_Git的reset命令详解
- 禁止微信下拉 露出黑色背景
- SUSE11sp3 perf工具安装过程
- 2008秋-计算机软件基础- 实验一 参考源程序
- MySQL函数大全 及用法示例
- yolov3训练自己的数据_YOLOv4 训练自己的数据集
- vtune mysql user_intel vtune 介绍、安装和使用
- Redis的基础事务
- 盘点 Python 高手都写不出来的几个错误
- python网课阿里云_阿里云大牛用过的680集Python视频教程无偿分享,学完万物皆可爬...
- 当你感到迷茫焦虑时,请听听白岩松这个演讲
- java jdk1.5_jdk1.5 64位官方下载
- NHOI2019总结
- UE4(虚幻4) 教学网站等资源推荐
- xp谷歌浏览器时间快了_Win7系统零日漏洞曝光,谷歌建议:升级Windows 10
- python直角坐标转极坐标_Python在OpenCV里实现极坐标变换功能
- 检测到远端X服务正在运行中
- numpy array 增加一列(行)
- NOJ1149 旅游预算(动态规划)