跳转至

SSKinGroup 组皮肤

概述

SSKinGroup 是 SOUI 中用于将多个皮肤组合在一起的皮肤类型。它允许为控件的不同状态(正常、悬停、按下、禁用)分别指定不同的皮肤,从而实现更丰富的视觉效果。

类定义

class SOUI_EXP SSKinGroup : public SSkinObjBase
{
protected:
    SAutoRefPtr<ISkinObj> m_skins[4]; // 不同状态的皮肤数组
};

属性列表

属性名 类型 默认值 说明
name string - 皮肤名
scale float - 比例
alpha int - alpha
enableColorize bool - enableColorize(是:1
normal skin - 正常状态皮肤
hover skin - 悬停状态皮肤
pushDown skin - 按下状态皮肤
disable skin - 禁用状态皮肤

XML示例

<!-- 基本用法 -->
<group name="btn_skin_group"
       normal="btn_normal_skin"
       hover="btn_hover_skin"
       pushDown="btn_pushdown_skin"
       disable="btn_disable_skin"/>

<!-- 组合不同类型的皮肤 -->
<group name="complex_skin_group"
       normal="imglist:btn_normal"
       hover="gradation:hover_gradation"
       pushDown="button:push_button"
       disable="colorrect:disable_rect"/>

<!-- 带透明度的组皮肤 -->
<group name="transparent_group"
       normal="btn_normal_skin"
       hover="btn_hover_skin"
       alpha="200"/>

使用场景

1. 按钮状态管理

  • 为按钮的不同状态指定不同的皮肤
  • 实现复杂的按钮交互效果

2. 控件样式切换

  • 根据控件状态动态切换样式
  • 实现丰富的用户界面反馈

3. 复合皮肤效果

  • 组合多种皮肤类型实现复杂效果
  • 灵活配置不同状态的视觉表现

最佳实践

  1. 状态完整性:尽量为所有状态(normal、hover、pushDown、disable)都指定皮肤,确保控件在各种状态下都有合适的视觉表现
  2. 皮肤类型匹配:组合的皮肤应具有相似的视觉尺寸,避免状态切换时出现明显的尺寸变化
  3. 性能优化:避免在组皮肤中使用过于复杂的子皮肤,以免影响渲染性能

常见问题

Q: 部分状态皮肤不显示怎么办?

A: 检查是否为对应状态指定了皮肤,未指定的状态将使用默认或前一状态的皮肤。

Q: 状态切换时出现闪烁怎么办?

A: 确保所有状态皮肤的尺寸一致,或者在控件上设置固定尺寸。

Q: 如何实现动态皮肤切换?

A: 通过代码动态修改组皮肤中各状态对应的子皮肤。

相关皮肤