IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> 嵌入式GUI LVGL『Tile View拼接视图控件』介绍 -> 正文阅读

[游戏开发]嵌入式GUI LVGL『Tile View拼接视图控件』介绍

一. LVGL GUI拼接视图控件的概念

?

Tileview是一个容器对象,其中的元素(称为tiles)可以以网格形式排列。通过滑动,用户可以在这些贴图之间导航。

如果Tileview是屏幕大小,它会提供一个你可能在智能手表上看到过的用户界面。

二. LVGL GUI拼接视图小部件和样式

Tileview和Page有相同的部分。除了使用LV_PAGE_PART_SCRL,因为它不能被引用,而且它总是透明的。请参阅本页的详细文档。

三. LVGL GUI拼接视图控件的使用

1. 有效位置(Valid positions)

这些瓷砖不必形成一个完整的网格,每个元素都存在。网格中可以有洞,但它必须是连续的,即不能有空的行或列。

使用lv_tileview_set_valid_positions(tileview, valid_pos_array, array_len)可以设置有效的位置。滚动只能滚动到这些位置。索引0,0表示左上角的tile。例如lv_point_t valid_pos_array[] = {{0,0}, {0,1}, {1,1}, {{LV_COORD_MIN, LV_COORD_MIN}}给出了一个带有“L”形状的Tile视图。它表示{1,1}中没有瓦片,因此用户不能滚动到那里。

换句话说,valid_pos_array告诉tiles在哪里。它可以在飞行中改变,以禁用特定瓷砖的一些位置。例如,可以有一个2x2的网格,其中添加了所有的贴图,但是第一行(y = 0)作为“主行”,第二行(y = 1)包含上面的贴图的选项。让我们说水平滚动只可能在主行,而不可能在第二行的选项之间。在这种情况下,当一个新的主贴图被选中时,valid_pos_array需要改变:

对于第一个主贴图:{0,0},{0,1},{1,0}来禁用{1,1}选项贴图

对于第二个主贴图{0,0}、{1,0}、{1,1}禁用{0,1}选项贴图

2. 设置拼接(Set tile)

设置当前可见的贴图使用lv_tileview_set_tile_act(tileview, x_id, y_id, LV_ANIM_ON/OFF)

3. 增加元素(Add element)

要添加元素,只需在Tileview上创建一个对象,并手动将其定位到所需的位置。

应该使用lv_tileview_add_element(tielview, element)来滚动(拖动)一个tielview的元素。例如,如果一个平铺贴图上有一个按钮,那么这个按钮需要显式地添加到tile view中,以便用户使用这个按钮滚动tile view。

4. 滚动传播(Scroll propagation)

这里可以很好地使用页面类对象(如列表)的滚动传播特性。例如,可以有一个完整大小的列表,当它到达顶部或底部的大多数位置时,用户将滚动tile视图。

5. 动画时间(Animation time)

Tileview的动画时间可以通过lv_tileview_set_anim_time(Tileview, anim_time)来调整。

6. 边缘闪烁(Edge flash)

当平铺视图到达无效位置或滚动平铺视图结束时,可以添加“边缘闪光”效果。

使用lv_tileview_set_edge_flash(tileview, true)来启用该特性。

7. 事件(Event)

除了基本事件外,还有一个特殊事件

LV_EVENT_VALUE_CHANGED?Sent when a new tile loaded either with scrolling or?lv_tileview_set_act. The event data is set ti the index of the new tile in?valid_pos_array?(It's type is?uint32_t?*)

我们来看个例子

void lvgl_title_view_test(void)
{
    static lv_point_t valid_pos[] = { {0,0}, {0, 1}, {1,1} };
    lv_obj_t* tileview;
    tileview = lv_tileview_create(lv_scr_act(), NULL);
    lv_tileview_set_valid_positions(tileview, valid_pos, 3);
    lv_tileview_set_edge_flash(tileview, true);

    lv_obj_t* tile1 = lv_obj_create(tileview, NULL);
    lv_obj_set_size(tile1, LV_HOR_RES, LV_VER_RES);
    lv_tileview_add_element(tileview, tile1);

    /*Tile1: just a label*/
    lv_obj_t* label = lv_label_create(tile1, NULL);
    lv_label_set_text(label, "Scroll down");
    lv_obj_align(label, NULL, LV_ALIGN_CENTER, 0, 0);

    /*Tile2: a list*/
    lv_obj_t* list = lv_list_create(tileview, NULL);
    lv_obj_set_size(list, LV_HOR_RES, LV_VER_RES);
    lv_obj_set_pos(list, 0, LV_VER_RES);
    lv_list_set_scroll_propagation(list, true);
    lv_list_set_scrollbar_mode(list, LV_SCROLLBAR_MODE_OFF);

    lv_list_add_btn(list, NULL, "One");
    lv_list_add_btn(list, NULL, "Two");
    lv_list_add_btn(list, NULL, "Three");
    lv_list_add_btn(list, NULL, "Four");
    lv_list_add_btn(list, NULL, "Five");
    lv_list_add_btn(list, NULL, "Six");
    lv_list_add_btn(list, NULL, "Seven");
    lv_list_add_btn(list, NULL, "Eight");

    /*Tile3: a button*/
    lv_obj_t* tile3 = lv_obj_create(tileview, tile1);
    lv_obj_set_pos(tile3, LV_HOR_RES, LV_VER_RES);
    lv_tileview_add_element(tileview, tile3);

    lv_obj_t* btn = lv_btn_create(tile3, NULL);
    lv_obj_align(btn, NULL, LV_ALIGN_CENTER, 0, 0);
    lv_tileview_add_element(tileview, btn);
    label = lv_label_create(btn, NULL);
    lv_label_set_text(label, "No scroll up");
}

好了,完结了,更多精彩继续戳↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章      下一篇文章      查看所有文章
加:2021-10-02 15:10:28  更:2021-10-02 15:10:45 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/28 2:40:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码