1

只是出于好奇,我正在努力优化我们 flex 应用程序的每个部分(这通常是我们应用程序的一小部分)。目前,我正在优化所有按钮/皮肤。我已经链接了一些我使用的按钮,以及一些我用来生成它们的示例代码。

请就如何使其更有效、更实用、整体上更好的方法提出建议。谢谢!

第一个按钮、图标和灰色背景第二个和第三个按钮,不同的背景但没有图标第四个按钮,和第一个类似,颜色不同带有图标但没有背景的按钮

如您所见,我们的按钮可能非常不同,但外观和感觉都相似。目前,我正在通过设置如下内容来创建“有状态皮肤”:

skin: ClassReference('com.mysite.assets.skins.NavigationButtonSkin');

然后,NavigationButtonSkin 看起来像这样:

public class NavigationButtonSkin extends UIComponent {

  // imports, constructor, etc

  protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void {

    // initialize fillColors, fillAlphas, roundedCorners, etc

    switch( name ){
      case 'upSkin':
      fillColors = [getStyle('backgroundColor'),getStyle('backgroundColor2')];      
      break;
      // do the same for overSkin, downSkin, disabledSkin, etc
    }

    // use this.graphics to draw background
    // use this.graphics to draw border on top of background

  }

}

我注释掉了一些直截了当的部分,但让我知道这是否是一种糟糕/低效的方法 - 以及如何改进。

谢谢!

4

2 回答 2

4

在性能方面,你的皮肤最好继承自 ProgrammaticSkin 而不是 UIComponent。ProgrammticSkin 本身继承自 Shape 并提供用于蒙皮的实用方法,例如 verticalGradientMatrix、drawRoundRect、...

这就是我看到你的代码所能说的。

好点是您使用程序化皮肤而不是基于位图/swf 的皮肤。

于 2011-04-20T14:09:33.507 回答
0

好吧,我不明白你的意思。你只是想知道你做得对吗?我假设您skin: ClassReference('com.mysite.assets.skins.NavigationButtonSkin');已添加到按钮的 css 中,这很好,但是我不明白您为什么要在 Actionscript 中完成所有操作。似乎效率低下,基本上您将失去所有 mxml 布局的能力和对 Catalyst 的支持(如果您将来需要它)。

尝试在 Flash Builder 中创建皮肤,它将创建一个具有默认按钮皮肤的 MXML,您可以在其中随意编辑它。使用 mxml 而不是 actionscript 进行基于状态的设计也容易得多。您应该从那里修改并为每种按钮类型设置单独的皮肤。

编辑:哦,废话,没看到这是 Flex 3... 使用该程序 ;) 听听弗洛里安说的话。

于 2011-04-20T14:11:44.163 回答