【前言】
作为手表的时间设置,可以使用文本框+按键,其次可以使用键盘+文本框,再者可以使用scroll Wheel控制来实现。相比三种方案,使用scroll Wheel(滚轮),控件少、直观、易操作,而且不需要对输入进行较验。所以作为优选方案。查找了实现滚轮的教程,官方给出了示例文档,几经研究后,感觉还是不是很直观,看到CSDN上有几位大佬也写出了详细的教程,但是版本过旧,所以在学习了官方文档与各路大佬的文章之后,我也初步的学会了scroll Wheel的使用。在此与大家分享如下,如有不对之处,还希望各位大佬给予指点。
【官方的学习示例】
这个教程做得还是比较详细的,有中英文的文档,但是中文的些描述还是不是非常的准确,如果英文比较好的大佬,可以直接阅读英文文档比较好。
【实现步骤】
- 创建两个自定义的容器,容器的大小为放置到屏幕上的比例来设置,一个为非选中状态,另一个为选中状态,以此来标定判断选择结果。
- 在我们的屏幕中创建一个scroll Wheel控件:
3、修改scroolWheel的属性值如下图,主要是配置文本的位置、个数、选中与非选中的状态等。
到此,我们的界面设计就完成了,接下来需要在工程中对他进行初始化设置。
4、在touchGFX Designer生成代码后,用编译器打开工程:
5、在工程中,有textCenterContainerselect.cpp、textCenterContainerunselect.cpp这是实现自定义控件的cpp,我们需要添回代码来初始化:
其代码为:
void textCenterContainerselect::updateText(int16_t value)
{
Unicode::snprintf(textBuffer, TEXT_SIZE, "%02d", value);
text.invalidate();
}
6、同样添加实updateText到另一个文件下:
7、最后我们在显示中对scrollWheel进行选择中与变化的函数进行实现:
首先我们有MainView.hpp中定义两个虚函数:
virtual void scrollWheelHourUpdateItem(textCenterContainerunselect& item, int16_t itemIndex);
virtual void scrollWheelHourUpdateCenterItem(textCenterContainerselect& item, int16_t itemIndex);
8、最后在mainview.cpp中实现这两个函数:
代码如下:
void MainView::scrollWheelHourUpdateItem(textCenterContainerunselect& item, int16_t itemIndex)
{
item.updateText(itemIndex);
}
void MainView::scrollWheelHourUpdateCenterItem(textCenterContainerselect& item, int16_t itemIndex)
{
item.updateText(itemIndex);
}
到此,我们的界面设计与代码都完成了。在虚拟器上运行效果如下:
下载到开发板上面的效果:
【总结】
到此,我们对scroolWheel控制的使用到一段落,看起来几步的操作,我却花了一个周未的时间,翻看了好多资料与视频,试了N遍,最后实现后,我总结就几个步骤,学习成本非常高。为此我把所有的过程与代码都详细的记录下来,分享给大家,希望对大家有用。