1

就是这样,如果你嵌入一个图标:

[Embed(source='icons/checkmark.png')]
private static var CheckMark:Class;

你最终得到一个动态类。您可以通过调用 setStyle 方法在运行时轻松地将图标分配给按钮:

var btn:Button = new Button();
btn.setStyle("icon", CheckMark);

但是,如果您想在运行时更改图标,例如更改它的 alpha 值甚至重绘像素,然后再将其分配给按钮,该怎么办?

到目前为止,我找不到满意的答案...

4

3 回答 3

2

这是我能找到的唯一似乎很接近的答案:动态图标 (带有查看源代码的示例)

他的解决方案包括在按钮的图标设置中使用的自定义“DynamicIcon”类,以及向 Button 类添加一种方法来绘制动态图标的自定义 Button 类。

最终结果是您能够将 BitmapData 发送到 DynamicIcon 类,该类将显示在按钮中。因此,嵌入您的图像,实例化您的资产类,获取 bitmapasset 并根据需要修改它并将 bitmapData 发送到图标。

这是一个有趣的问题,似乎应该有一个更简单的解决方案,但这并不麻烦。

于 2008-10-02T05:05:50.163 回答
0

我解决这个问题的方法是实现一个手动绘制图标本身的编程皮肤类。您可能需要做更多的工作来确保按钮计算正确的大小,就好像它有一个图标一样,即使它没有。您可能需要翻阅 Button 源代码才能查看对图标的引用是如何存储的。

我喜欢创建完全符合我要求的程序化皮肤,然后使用有趣的 CSS 声明来修改状态——例如:

button.setStyle("customIconAlpha", .4);

然后当然皮肤或自定义按钮类将具有:

var alpha:Number = getStyle("customIconAlpha") as Number;

(不确定您是否必须对那个进行类型转换)

于 2008-10-02T17:35:31.203 回答
0

我发现程序化皮肤的一个大问题是按钮拒绝测量宽度/高度。我通过覆盖每个 get 方法轻松地解决了这个问题:

覆盖公共函数 get width():Number { return WIDTH; } 覆盖公共函数 get height():Number { return HEIGHT; }

在我的情况下,我需要修改 TabNavigator 中的按钮,因此没有简单的方法来子类化按钮。幸运的是,每个皮肤的父级都是按钮,因此在皮肤中使用静态方法,您可以识别图标皮肤所属的按钮实例。

如果您使用覆盖所有的“图标”样式,将为每个状态创建一个新的皮肤对象。因此,在更改图标状态时需要牢记这一点。

于 2009-04-02T16:10:20.377 回答