动画控件 (SAnimateImgWnd)¶
动画控件用于显示图片序列动画,支持多种动画模式和播放控制。它是实现图片动画效果的理想选择,可用于加载动画、状态指示等场景。
基本信息¶
- 类名:
SAnimateImgWnd
- 控件标签:
animate
- 基类:
SWindow
- 功能:提供图片序列动画显示
属性说明¶
基本属性¶
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
skin | string | - | 动画皮肤名称 |
speed | int | - | 切换帧时间(毫秒) |
autoStart | bool | - | 显示时自动播放动画(true-启用,false-禁用) |
repeat | int | - | 重复播放次数,默认无限循环 |
外观属性¶
属性名 | 类型 | 默认值 | 说明 |
---|---|---|---|
alpha | int | 255 | 透明度(0-255) |
stretch | bool | 0 | 是否拉伸显示 |
clipClient | bool | 1 | 是否裁剪到客户区 |
frameMode | string | index | 帧模式(index/position) |
使用示例¶
基本动画¶
<animate name="aniBasic"
pos="10,10,74,74"
skin="loading_skin"
speed="50"
autoStart="true"/>
自定义动画¶
<animate name="aniCustom"
pos="84,10,148,74"
skin="custom_anim"
speed="100"
autoStart="false"
repeat="3"/>
无限循环动画¶
<animate name="aniLoop"
pos="158,10,222,74"
skin="loop_anim"
speed="80"
autoStart="true"
repeat="-1"/>
动画操作¶
代码操作¶
// 查找动画控件
SAnimateImgWnd *pAnimate = FindChildByName2<SAnimateImgWnd>(L"aniBasic");
// 开始动画
pAnimate->Start();
// 停止动画
pAnimate->Stop();
// 暂停动画
pAnimate->Pause();
// 恢复动画
pAnimate->Resume();
// 设置帧速率
pAnimate->SetAttribute(L"speed", L"100");
// 设置是否自动开始
pAnimate->SetAttribute(L"autoStart", L"true");
动画状态控制¶
void AnimateStateControl()
{
SAnimateImgWnd *pAnimate =
FindChildByName2<SAnimateImgWnd>(L"aniState");
if(!pAnimate) return;
// 根据状态播放不同动画
switch(GetState()) {
case STATE_LOADING:
pAnimate->SetSkin(L"loading_skin");
pAnimate->SetFrameCount(8);
pAnimate->Start();
break;
case STATE_PROGRESS:
pAnimate->SetSkin(L"progress_skin");
pAnimate->SetFrameCount(16);
pAnimate->SetAutoLoop(TRUE);
pAnimate->Start();
break;
case STATE_COMPLETE:
pAnimate->SetSkin(L"complete_skin");
pAnimate->SetFrameCount(1);
pAnimate->Stop();
break;
}
}
事件处理¶
动画控件支持以下事件:
事件名 | EventID | 说明 |
---|---|---|
EVT_ANI_START | EventAniStart::EventID | 动画开始事件 |
EVT_ANI_STOP | EventAniStop::EventID | 动画停止事件 |
EVT_ANI_FRAME | EventAniFrame::EventID | 动画帧切换事件 |
// 事件处理示例
EVENT_MAP_BEGIN()
EVENT_NAME_HANDLER(L"aniBasic", EventAniStart::EventID, OnAniStart)
EVENT_NAME_HANDLER(L"aniBasic", EventAniStop::EventID, OnAniStop)
EVENT_MAP_END()
void OnAniStart(IEvtArgs *pEvt)
{
// 处理动画开始事件
}
void OnAniStop(IEvtArgs *pEvt)
{
// 处理动画停止事件
}
样式定制¶
基本样式¶
<style>
<class name="animateStyle"
frameInterval="100"
alpha="255"
autoLoop="1"/>
</style>
<animate class="animateStyle"/>
自定义动画状态¶
<animate name="aniTemplate"
skin="state_skin">
<state name="normal"
frame="0"/>
<state name="hover"
frame="1"/>
<state name="push"
frame="2"/>
</animate>
最佳实践¶
常见问题¶
Q: 动画不播放怎么办?¶
A: 检查 autoStart 是否设置为 true,或通过代码调用 Start() 方法。
Q: 动画播放速度不对怎么办?¶
A: 调整 speed 属性值,单位为毫秒。
Q: 如何控制动画循环次数?¶
A: 使用 repeat 属性设置循环次数,-1 为无限循环。
相关控件¶
- 图像控件(SImageWnd) - 基础图像显示控件
- 进度条控件(SProgress) - 进度指示控件