当前位置: 首页 > news >正文

LVGL实现按钮互斥效果

效果

在这里插入图片描述

实现代码

在你的代码中调用 lv_100ask_example_btn 函数:


 static void btn_event_handler(lv_event_t * e)
{
    lv_event_code_t code = lv_event_get_code(e);
    lv_obj_t * another_btn = (lv_obj_t *)lv_event_get_user_data(e);
    lv_obj_t * btn = lv_event_get_target(e);
    lv_obj_t * label = lv_obj_get_child(btn, 0);
    char * label_text = lv_label_get_text(label);

    if(code == LV_EVENT_CLICKED) {
        if((strcmp(label_text, "START") == 0)&&\
           (lv_obj_has_state(another_btn, LV_STATE_DISABLED))) {
            lv_obj_add_state(btn, LV_STATE_DISABLED);
            lv_obj_clear_state(another_btn, LV_STATE_DISABLED);
        }
        else if((strcmp(label_text, "STOP") == 0) &&\
                (lv_obj_has_state(another_btn, LV_STATE_DISABLED))) {
            lv_obj_clear_state(another_btn, LV_STATE_DISABLED);
            lv_obj_add_state(btn, LV_STATE_DISABLED);
        }
    }
}


static void lv_100ask_example_btn(void)
{
    lv_obj_t * label;

    lv_obj_t * btn1 = lv_btn_create(lv_scr_act());
    lv_obj_align(btn1, LV_ALIGN_CENTER, 0, -40);

    label = lv_label_create(btn1);
    lv_label_set_text(label, "START");
    lv_obj_center(label);

    lv_obj_t * btn2 = lv_btn_create(lv_scr_act());
    lv_obj_add_state(btn2, LV_STATE_DISABLED);
    lv_obj_align(btn2, LV_ALIGN_CENTER, 0, 40);

    label = lv_label_create(btn2);
    lv_label_set_text(label, "STOP");
    lv_obj_center(label);

    lv_obj_add_event_cb(btn1, btn_event_handler, LV_EVENT_ALL, btn2);
    lv_obj_add_event_cb(btn2, btn_event_handler, LV_EVENT_ALL, btn1);
}

相关文章:

  • PX4模块设计之二十八:RCInput模块
  • windows10安装蓝牙驱动方法步骤
  • SQL语句如何避免在mysql插入重复数据
  • JsonSchema 转换为 Typescript
  • 【区块链 | OpenZeppelin】手把手交易使用OpenZeppelin Upgrades部署可升级智能合约
  • 同一公司开发的多个软件,可以用同一张代码签名证书吗?
  • 深度分析:用户最喜欢用哪种NFT做头像
  • php 小数计算 结果变无限小数解决方案
  • WebRTC研究:丢包与抖动
  • freeswitch的3XX重定向
  • jsp+sql毕业生招聘系统免费系统+论文
  • Java毕业设计-火车订票管理系统
  • SwiftUI 界面状态 成员变量 @State @Buiding immutable
  • Java 进阶集合和数据结构
  • RabbitMQ、RocketMQ、Kafka常见消息队列不得不知道的事
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Codepen 每日精选(2018-3-25)
  • hadoop集群管理系统搭建规划说明
  • passportjs 源码分析
  • Python socket服务器端、客户端传送信息
  • Python进阶细节
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 从输入URL到页面加载发生了什么
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端设计模式
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 详解NodeJs流之一
  • 小而合理的前端理论:rscss和rsjs
  • 阿里云ACE认证学习知识点梳理
  • 如何用纯 CSS 创作一个货车 loader
  • ​插件化DPI在商用WIFI中的价值
  • #define,static,const,三种常量的区别
  • #git 撤消对文件的更改
  • (16)Reactor的测试——响应式Spring的道法术器
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (剑指Offer)面试题34:丑数
  • (篇九)MySQL常用内置函数
  • (十八)三元表达式和列表解析
  • (一)Linux+Windows下安装ffmpeg
  • (译) 函数式 JS #1:简介
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • **PHP二维数组遍历时同时赋值
  • .aanva
  • .a文件和.so文件
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET6 命令行启动及发布单个Exe文件
  • .NET多线程执行函数
  • .NET值类型变量“活”在哪?
  • @EnableConfigurationProperties注解使用
  • @FeignClient 调用另一个服务的test环境,实际上却调用了另一个环境testone的接口,这其中牵扯到k8s容器外容器内的问题,注册到eureka上的是容器外的旧版本...
  • @requestBody写与不写的情况
  • @staticmethod和@classmethod的作用与区别
  • [ 手记 ] 关于tomcat开机启动设置问题