[C] 纯文本查看 复制代码 static void drag_event_handler(lv_event_t * e)
{
lv_obj_t * obj = lv_event_get_target(e);
lv_indev_t * indev = lv_indev_get_act();
if(indev == NULL) return;
lv_point_t vect;
lv_indev_get_vect(indev, &vect);
lv_coord_t x = lv_obj_get_x(obj) + vect.x;
lv_coord_t y = lv_obj_get_y(obj) + vect.y;
lv_obj_set_pos(obj, x, y);
}
/**
* Make an object dragable.
*/
void lv_example_obj_2(void)
{
lv_obj_t * obj;
obj = lv_obj_create(lv_scr_act());
lv_obj_set_size(obj, 100, 100);
//lv_obj_add_event_cb(obj, drag_event_handler, LV_EVENT_PRESSING, NULL);
lv_obj_t * label = lv_label_create(obj);
lv_label_set_text(label, "Drag me");
lv_obj_center(label);
}
问题:
在stm32f429使用lvgl,显示是通过ltdc+dma2d中断完成的。
上面的代码是显示例程。在lv_conf文件中如果LV_USE_PERF_MONITOR的值为0.则会出现图1的情况,如果LV_USE_PERF_MONITOR的值为1.则会出现图2的情况。
附加信息:
1:如果lv_obj_add_event_cb(obj, drag_event_handler, LV_EVENT_PRESSING, NULL);这一句在如果例程没有注释掉,在显示屏触摸该控件后,也会在屏幕上产生像图2一样类似的纹路(获取触摸点坐标和是否按下的程序在单独测试下没有问题)
2:在运行lv_example_obj_2后再运行LcdApp_CrePag()的结果如图3,正常显示,二者函数都在while(1)前创建。
运行代码如下:
[C] 纯文本查看 复制代码 //lv_example_keyboard_1();
lv_example_obj_2();
LcdApp_CrePag();
while(1)
{
if ((TimerFlag % 30) == 0)
{
Gt5688_TapProcess(); //5ms左右处理一次
lv_timer_handler();//必须在5ms左右轮询一次,好像没有啥刷新会一直卡在里面?
}
}
|