状态栏
这是一种新样式的状态栏。在非下拉状态时,仅在屏幕顶部用小字体显示实时时间。点击顶部可以下拉状态栏,随着下拉,遮罩颜色逐渐变为不透明,时间文字变大。下拉到一定程度后,状态栏完全展开,显示日期和消息通知。
实现
文件
函数 static void status_bar(void *parent, gui_obj_t *ignore_gesture)
位于 gui_engine\example\screen_454_454\gui_menu\apps_in_menu.c
中。
设计
graph TB
A[Parent] --> B[win]
B --> D[Rect hidden]
B --> E[Text Time]
B --> H[win hidden]
H --> F[Text Data]
H --> G[Text NOTIFS]
在此状态栏中,以窗口控件为根节点。使用矩形绘制函数绘制状态栏的白色半透明背景。嵌套了三个文本框,分别表示时间、日期和通知消息。其中,时间文本框使用函数缓存成图像,因为时间显示需要缩放。矩形背景和日期、通知消息的文本初始时被隐藏。触摸屏交互效果在根节点窗口控件的动画回调函数中实现。
在窗口的动画回调函数中,首先将时间和日期文本框的内容更新为实时的时间和日期,格式分别为 “07:55” 和 “Tue, Apr 16”。然后,读取触摸板数据,根据当前触屏信息如手势判断状态栏的显示效果,例如是否隐藏背景、是否隐藏日期和通知、更改背景透明度、时间文本框的缩放比例等。
status_bar
函数有一个参数ignore_gesture
,它接收一个指向控件的指针。此参数用于解决控件上的手势与状态栏之间的冲突。遇到这种冲突时,通过这段代码if (ignore_gesture) { ignore_gesture->gesture = 1; }
来停用相应控件的手势交互。这里,将gesture
属性设置为’1’关闭了该控件的手势响应。