跳转到主要内容

圆形进度条

圆形进度条显示当前进度,方法是将圆环置于背景图像上方作为进度指示器。 圆环的颜色Alpha、以及整体参数都可以配置。 可以创建自定义的背景图像,并更改进度指示器的不同参数(比如位置和大小),以适应自定义的背景图像。

在模拟器中运行的圆形进度条

控件组

圆形进度条位于TouchGFX Designer中的进度指示器控件组中。

TouchGFX Designer中的圆形进度条

属性

TouchGFX Designer中圆形进度条的属性。

属性组属性说明
名称控件的名称名称是TouchGFX Designer和代码中使用的唯一标识符
位置XY指定控件左上角相对于其父的位置。

WH指定控件的宽度和高度。
圆形进度条的大小由所选背景图像的大小决定。

锁定指定控件是否应锁定为其当前的X、Y、W和H。
如果锁定控件,还会禁止通过屏幕与控件进行交互。

可见指定控件的可见性。 如果将控件标记为不可见,还会禁止通过屏幕与控件进行交互。
样式样式 指定控件的预定义设置,用于将所选属性设为预定义的值。
这些样式包含可免费使用的图像
图像& 颜色背景指定背景图像。

进度指定用于填充圆环的颜色或图像。
最小值最大值指定指示器的最小和最大整数值。

初始指定进度指示器的初始值。总步数指定进度指示器报告新值的粒度。 例如,如果需要以0%、10%、20%、...、100%的形式报告进度,总值应该设为10。

最小步数指定进度指示器显示的最小步数。
外观X轴圆心位置Y轴圆心位置指定进度圆环的圆心相对于其‘圆形进度条’父窗口的位置。

起始角度& 结束角度指定所绘圆环的起始和结束角度。

半径指定进度圆环的大小。

线条宽度指定进度圆环的线条宽度。 如果该值为0,则进度圆环与半径一样大。 否则,将为进度圆环配置指定的宽度(从外侧开始,向内侧移动)。

端点样式指定线条的端点样式。

Alpha指定控件的透明度。 控件的Alpha值介于0和255之间。 0表示完全透明,255表示不透明。
Mixin可拖动 指定在运行时控件是否可拖动。

ClickListener 指定控件被点击时是否会调用回调函数。

FadeAnimator 指定控件是否可绘制其 Alpha 值变化的动画。

MoveAnimator 指定控件是否可绘制 XY 值变化的动画。

交互

下面的部分介绍了“圆形进度条”支持的操作和触发。

动作

控件特有的动作说明
设置值设置进度指示器的值。
标准控件动作说明
移动控件随时间的推移将控件移动到新位置。
渐隐控件随时间的推移改变控件的Alpha值。
隐藏控件隐藏控件(将可见性设置为false)。
显示控件使隐藏的控件可见(将可见性设置为true).

触发

触发条件说明
数值更新完成将在更新动画完成时触发。 如果更新的持续时间为0,更新将立即发生,但仍然会触发此事件。
数值已更新在更新动画期间,将为即时更新和中间步骤而触发。 只有在新值与当前值不同时才触发。

性能

圆形进度条包含一个圆环和一幅背景图像。 该圆环基于画布控件,高度依赖于MCU进行渲染。 因此,在大部分平台上,会将圆形进度条视为要求高的控件。

更多关于画布控件绘制性能的信息,请阅读通用UI组件性能部分。

示例

生成代码

在生成的视图基类的代码中,可以查看TouchGFX Designer是如何创建“圆形进度条”的。

Screen1ViewBase.cpp
circleProgress.setXY(188, 84);
circleProgress.setProgressIndicatorPosition(0, 0, 104, 104);
circleProgress.setRange(0, 100);
circleProgress.setCenter(52, 52);
circleProgress.setRadius(50);
circleProgress.setLineWidth(0);
circleProgress.setStartEndAngle(0, 360);
circleProgress.setBackground(touchgfx::Bitmap(BITMAP_BLUE_PROGRESSINDICATORS_BG_MEDIUM_CIRCLE_INDICATOR_BG_FULL_ID));
circleProgressPainter.setBitmap(touchgfx::Bitmap(BITMAP_BLUE_PROGRESSINDICATORS_FILL_MEDIUM_CIRCLE_INDICATOR_FILL_FULL_ID));
circleProgress.setPainter(circleProgress1Painter);
circleProgress.setValue(0);

用户代码

下面的示例演示了如何实现handleTickEvent()函数以模拟进度条。 运行这段代码将创建本文开头所示的应用

Screen1View.hpp
class Screen1View : public Screen1ViewBase
{
public:
Screen1View();
virtual ~Screen1View() {}
virtual void setupScreen();
virtual void tearDownScreen();
virtual void handleTickEvent();
protected:
bool increase = true;
};
Screen1View.cpp
void Screen1View::handleTickEvent()
{
int currentValue = circleProgress.getValue();
int16_t max;
int16_t min;
circleProgress.getRange(min, max);

if (currentValue == min)
{
increase = true;
}
else if (currentValue == max)
{
increase = false;
}

int nextValue = increase == true ? currentValue+1 : currentValue-1;

circleProgress.setValue(nextValue);
}
Tip
可在用户代码中使用这些函数以及CircleProgress类中提供的其他函数。 如果更改控件的外观,请必须调用 circleProgress1.invalidate() 强制进行重新绘制。

TouchGFX Designer示例

如需进一步了解“圆形进度条”,请尝试在TouchGFX Designer中使用以下UI模板创建新应用:

TouchGFX Designer中的进度指示器示例UI模板

API参考