开源模仿SUI按钮状态滑动已假乱真
功能说明:
本程序是一个基于易语言(EasyLanguage)版本 2 编写的窗口应用程序片段,核心功能是实现一个具有平滑过渡动画效果的滑动开关控件。通过分析代码中的子程序名称、定时器逻辑及控件操作,该程序主要通过两个定时器分别控制两个开关控件(“开关”与“开关 2")的位移动画,模拟用户在界面上进行开关切换时的视觉反馈。
一、程序整体架构
程序结构清晰,包含版本声明(.版本 2)和窗口程序集定义。主要逻辑分散在以下几个关键子程序中:
1. `_时钟 1_周期事件`:控制正向滑动动画。
2. `_开关_被单击`:触发正向滑动动作。
3. `_时钟 2_周期事件`:控制反向滑动动画。
4. `_开关 2_被单击`:触发反向滑动动作。
5. `_启动窗口_创建完毕`:窗口初始化入口(本片段中为空)。
此外,程序还引用了一个未在片段中显示的 `处理事件 ()` 子程序,用于在动画结束后回调业务逻辑。
二、详细功能逻辑分析
1. 正向切换流程(向右滑动)
该流程由用户点击“开关”控件触发。
- 触发机制:在 `_开关_被单击` 事件中,将“时钟 1"的周期设置为 20 毫秒,启动高频定时刷新。
- 动画执行:进入 `_时钟 1_周期事件` 后,程序首先计算目标边界 `i`,即“标签 1"的右边缘减去“开关”自身的宽度。只要“开关”当前位置未超出此边界,程序便判断其是否到达中间区域。若是,则执行 `开关。移动` 命令,使其横坐标增加 5 像素,产生向右滑动的视觉效果。
- 状态终结:当滑动达到终点条件或逻辑判断跳出后,程序会停止“时钟 1",暂时禁用并隐藏当前的“开关”控件。随后,使另一个控件“开关 2"可见,并将其移动到固定位置(219, 40)。
- 业务回调:最后调用 `处理事件 ()`,标志着一次完整的向右切换动画完成,此时外部逻辑可得知状态已变为“开”或“状态 B”。
2. 反向切换流程(向左滑动)
该流程由用户点击“开关 2"控件触发,逻辑与正向流程对称。
- 触发机制:在 `_开关 2_被单击` 事件中,启动“时钟 2",周期同样设为 20 毫秒。
- 动画执行:在 `_时钟 2_周期事件` 中,程序监控“开关 2"相对于“标签 1”的位置。只要“开关 2"在有效范围内,便执行横坐标减 5 的操作,形成向左回退的动画效果。
- 状态终结:动画结束后,停止计时器,隐藏“开关 2",恢复显示原始的“开关”控件,并将其重置到起始位置(160, 40)。
- 业务回调:再次调用 `处理事件 ()`,通知系统状态已回退至“关”或“状态 A”。
三、设计特点与用途
1. 双控件模拟法:程序没有使用单一的进度条控件来实现滑动,而是利用了两个独立的开关控件互相遮挡和显现来模拟滑块的整体位移。这种方法在某些旧版图形界面库中常用于定制外观。
2. 边界保护:代码中包含了对控件左右边界的检查(如 `开关。左边 ≥ i ÷ 2` 等判断),防止控件移出预设的容器(标签 1)范围,确保 UI 整洁。
3. 异步动画:利用时钟周期事件(Timer)而非直接循环死锁来实现动画,保证了程序的响应性,不会阻塞主线程。
四、总结
综上所述,该易语言代码片段是一个标准的 UI 组件逻辑实现,主要用于构建一个交互式的双状态切换开关。它封装了底层的移动计算、事件监听和状态管理,对外提供了一个清晰的 `处理事件` 接口。此类代码常见于配置界面、游戏设置菜单或需要视觉反馈的控制面板开发中,旨在提升软件的人机交互体验。
======窗口程序集1
| |
| |------ _时钟1_周期事件
| |
| |------ _开关_被单击
| |
| |------ _时钟2_周期事件
| |
| |------ _开关2_被单击
| |
| |------ __启动窗口_创建完毕
注:本站源码主要来源于网络收集。如有侵犯您的利益,请联系我们,我们将及时删除!
部分源码可能含有危险代码,(如关机、格式化磁盘等),请看清代码在运行。
由此产生的一切后果本站均不负责。源码仅用于学习使用,如需运用到商业场景请咨询原作者。
使用本站源码开发的产品均与本站无任何关系,请大家遵守国家相关法律。