touchGFX采用MVP架構,如下所示:
本文界面如下所示:
本文將實現兩個操作:
1、觸摸屏點擊開關按鍵實現打印開關顯示信息,模擬開關燈效果
2、板載案按鍵控制觸摸屏LED燈的顯示和隱藏
一、觸摸屏點擊開關按鍵實現打印開關顯示信息,模擬開關燈效果
實現的方向為view->present->model
1、添加led開關交互事件:button_clicked_led
2、screenView.hpp中聲明button_clicked_led函數,再到screenView.cpp中定義此函數并執行通知Presenter層
3、screenPresenter.hpp中聲明button_clicked_led函數,screenPresenter.cpp中定義此函數將消息傳遞給model層
4、Model.hpp中聲明button_clicked_led函數,Model.cpp中定義此函數將依據此消息執行開關燈操作
如此即可完成觸摸屏開關控制硬件led燈的亮滅
二、板載案按鍵控制觸摸屏LED燈的顯示和隱藏
流程方向:model->modelListener->present->view
1、ModelListener.hpp中聲明函數notify_key_event,并在Model.cpp中定義此函數,將外部按鍵的動作通知給modelListener
因為ModelListener被Model繼承了,也被screenPresenter繼承了
2、screenPresenter.hpp中聲明函數notify_key_event,并在screenPresenter.cpp中定義此函數,并通知給view
3、screenView.hpp中聲明函數notify_key_event,并在screenView.cpp中定義此函數,并更改界面燈的顯示隱藏
image1_led是這個燈的名字哈
如此就實現了外部按鍵控制觸摸屏
三、補充另一個:按鍵切換屏幕背景色
添加KeyController.cpp|KeyController.hpp文件
KeyController.cpp
#include "KeyController.hpp"
#include "Key_Driver.h"using namespace touchgfx;void KeyController::init()//按鍵初始化
{//Key_Init();//在BSP中統一初始化
}bool KeyController::sample(uint8_t& key)//按鍵掃描
{uint8_t value = 0;if(Key_ScanPin(&value) < 0)return false;//Key_ScanPin按鍵掃描并獲取鍵值key = value;return true;
}
KeyController.hpp
#ifndef SCREENVIEW_HPP
#define SCREENVIEW_HPP#include <gui_generated/screen_screen/screenViewBase.hpp>
#include <gui/screen_screen/screenPresenter.hpp>
#include "stdint.h"class screenView : public screenViewBase
{
public:screenView();virtual ~screenView() {}virtual void setupScreen();virtual void tearDownScreen();virtual void button_clicked_led();virtual void notify_key_event(uint8_t event,uint8_t KeyValue);
protected:
};#endif // SCREENVIEW_HPP
TouchGFXHAL.cpp添加按鍵執行代碼
打開??TouchGFXHAL.cpp???文件新建一個??KeyController??對象
然后在??void TouchGFXHAL::initialize()??里面這個對象賦值給系統,記得調用初始化函數
如此即可實現按鍵改變屏幕背景色
三、參考文章
沒使用過touchGFX則先看視頻:https://www.yuanzige.com/course/detail/80229
Model-View-Presenter設計模式示例:https://smallash.blog.csdn.net/article/details/127047799?spm=1001.2014.3001.5502