我是靠谱客的博主 英俊美女,最近开发中收集的这篇文章主要介绍Lvgl8 scroll 水平/垂直滚动切换1.使用工具2.设置滚动方向3.例程,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

目录

  • 1.使用工具
  • 2.设置滚动方向
  • 3.例程


1.使用工具

1.图标网站
2.lvgl官方图片在线取模工具
在这里插入图片描述

2.设置滚动方向

lv_obj_set_scroll_snap_x(background, LV_SCROLL_SNAP_CENTER);  // 设置滚动方向:X
lv_obj_set_scroll_snap_y(background, LV_SCROLL_SNAP_CENTER);  // 设置滚动方向:Y

3.例程

#include <stdlib.h>
#include <unistd.h>
#include "lvgl/lvgl.h"
#include "lv_drivers/win32drv/win32drv.h"
#include <windows.h>

static uint8_t app_id = 0;
static int app_count = 0; // app控件总数
static void btn_up_event(lv_event_t *e)
{
    if (app_id != 0)
    {
        app_id--;
        lv_obj_scroll_to_view(lv_obj_get_child((lv_obj_t *)e->user_data, app_id), LV_ANIM_ON);
        printf("up,%dn", app_id);
    }
}

void btn_down_event(lv_event_t *e)
{
    if (app_id < (app_count - 1))
    {
        app_id++;
        lv_obj_scroll_to_view(lv_obj_get_child((lv_obj_t *)e->user_data, app_id), LV_ANIM_ON);
        printf("down,%dn", app_id);
    }
}

void demo_test(void)
{
    lv_obj_t *window = lv_scr_act();
    LV_LOG_USER("LVGL initialization completed!");
    LV_LOG_USER("%d", app_id);

    /**********************
     *  加载图片
     **********************/
    LV_IMG_DECLARE(ImgBg);         // 背景图片
    LV_IMG_DECLARE(ImgButterfly);  //
    LV_IMG_DECLARE(ImgInfo);       //
    LV_IMG_DECLARE(ImgLight);      //
    LV_IMG_DECLARE(ImgMountain);   //
    LV_IMG_DECLARE(ImgShadowDown); //
    LV_IMG_DECLARE(ImgShadowUp);   //
    LV_IMG_DECLARE(ImgStopWatch);  //
    LV_IMG_DECLARE(ImgTimeCfg);    //

    int app_img_list[][2] = {{&ImgStopWatch, "app1"},
                             {&ImgMountain, "app2"},
                             {&ImgLight, "app3"},
                             {&ImgTimeCfg, "app4"},
                             {&ImgButterfly, "app5"},
                             {&ImgInfo, "app6"}};
    /**********************
     *  构造控件
     **********************/
    lv_obj_t *btn_up = lv_btn_create(window);
    lv_obj_t *btn_down = lv_btn_create(window);
    lv_obj_t *up_label = lv_label_create(btn_up);
    lv_obj_t *down_label = lv_label_create(btn_down);
    lv_label_set_text(up_label, "up");
    lv_label_set_text(down_label, "down");

    lv_obj_t *background = lv_img_create(window);

    lv_obj_t *app1 = lv_imgbtn_create(background);
    lv_obj_t *app2 = lv_imgbtn_create(background);
    lv_obj_t *app3 = lv_imgbtn_create(background);
    lv_obj_t *app4 = lv_imgbtn_create(background);
    lv_obj_t *app5 = lv_imgbtn_create(background);
    lv_obj_t *app6 = lv_imgbtn_create(background);

    /**********************
     *  设置参数
     **********************/

    /*按键参数*/
    lv_obj_center(up_label);
    lv_obj_center(down_label);

    lv_obj_align(btn_up, LV_ALIGN_CENTER, 180, -50);
    lv_obj_align(btn_down, LV_ALIGN_CENTER, 180, 50);

    lv_obj_set_size(btn_up, 80, 40);
    lv_obj_set_size(btn_down, 80, 40);

    lv_obj_add_event_cb(btn_up, btn_up_event, LV_EVENT_CLICKED, background);
    lv_obj_add_event_cb(btn_down, btn_down_event, LV_EVENT_CLICKED, background);

    /* 滚动条 */
    lv_obj_set_scroll_snap_x(background, LV_SCROLL_SNAP_CENTER);  // 设置滚动方向:X
    lv_obj_set_scrollbar_mode(background, LV_SCROLLBAR_MODE_OFF); // 隐藏滚动条

    /* 设置背景 */
    static lv_style_t background_style;                     // 构造style对象
    lv_style_init(&background_style);                       // 初始化style
    lv_style_set_width(&background_style, 240);             // 设置宽度
    lv_style_set_height(&background_style, 240);            // 设置高度
    lv_style_set_align(&background_style, LV_ALIGN_CENTER); // 设置居中对齐
    lv_style_set_bg_img_src(&background_style, &ImgBg);     // 设置背景图片
    lv_obj_add_style(background, &background_style, 0);     // 将style绑定到menu

    //    lv_obj_set_scroll_dir(background , LV_DIR_TOP);//只允许上下滚动
    //    lv_obj_add_flag(background , LV_OBJ_FLAG_SCROLL_ONE);//设置一次只允许滚动一个控件位置
    //    lv_obj_clear_flag(background ,LV_OBJ_FLAG_SCROLL_MOMENTUM);//清除滚动惯性效果

    //    menu为obj对象的时候使用
    //    static lv_style_t menu_style;
    //    lv_style_init(&menu_style);
    //    lv_style_set_width(&menu_style, 135);
    //    lv_style_set_height(&menu_style, 240);
    //    lv_style_set_align(&menu_style, LV_ALIGN_CENTER);
    //    lv_style_set_bg_img_src(&menu_style,&ImgBg);
    //    lv_style_set_border_width(&menu_style, 0);
    //    lv_obj_add_style(background , &menu_style, 0);

    /* 创建grid布局 */
    const lv_coord_t col_size[] = {120, 120, 120, 120, 120, 120, LV_GRID_TEMPLATE_LAST}; // 建立一列列宽为 120 的数组
    static lv_coord_t row_size[] = {100, LV_GRID_TEMPLATE_LAST};                         // 建立六行行宽为 100 的数组
    lv_obj_set_grid_dsc_array(background, col_size, row_size);                           // 建立布局
    lv_obj_set_grid_align(background, LV_GRID_ALIGN_CENTER, LV_GRID_ALIGN_CENTER);       // 设置布局左右居中对齐,顶对齐

    /* 循环将 app 放入布局 */
    app_count = sizeof(app_img_list) / sizeof(app_img_list[0]); // 获取app_img_list[]元素数量
    // printf("%dn", app_count);
    for (uint8_t i = 0; i < app_count; i++)
    {
        lv_obj_t *app = lv_obj_get_child(background, i); // 获取子对象(前面已经创建了6个 imgbtn)
        lv_img_dsc_t *img = app_img_list[i][0];          // 获取图标

        // 添加imgbtn
        lv_obj_set_grid_cell(app,                                          // 将 app 控件放入对应的网格内
                             LV_GRID_ALIGN_CENTER, i, 1,                   // 列对齐方式,位置i,占据1列
                             LV_GRID_ALIGN_CENTER, 0, 1);                  // 行对齐方式,位置0,占据1行
        lv_imgbtn_set_src(app, LV_IMGBTN_STATE_RELEASED, img, NULL, NULL); // 给app控件绑定图片
        lv_obj_set_size(app, (*img).header.w, (*img).header.h);            // 设置app控件的大小为图片大小(一定要将imgbtn大小设置成图片大小,否则无法对齐)

        // 添加文本
        lv_obj_t *label = lv_label_create(background);
        char *str = app_img_list[i][1];
        lv_label_set_text(label, str);
        lv_obj_set_grid_cell(label,                      // 将 label 控件放入对应的网格内
                             LV_GRID_ALIGN_CENTER, i, 1, // 列对齐方式,位置i,占据1列
                             LV_GRID_ALIGN_END, 0, 1);   // 行对齐方式,位置0,占据1行
    }
    lv_obj_scroll_to_view(app1, LV_ANIM_OFF); // 默认显示第一个图标
}

运行效果
在这里插入图片描述

特别感谢
LVGL动画例程记录

最后

以上就是英俊美女为你收集整理的Lvgl8 scroll 水平/垂直滚动切换1.使用工具2.设置滚动方向3.例程的全部内容,希望文章能够帮你解决Lvgl8 scroll 水平/垂直滚动切换1.使用工具2.设置滚动方向3.例程所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部