Apache flex Flex:修改嵌入式图标并在按钮中使用它?
仅此而已,如果嵌入图标:Apache flex Flex:修改嵌入式图标并在按钮中使用它?,apache-flex,flash,image,icons,Apache Flex,Flash,Image,Icons,仅此而已,如果嵌入图标: [Embed(source='icons/checkmark.png')] private static var CheckMark:Class; 您将得到一个动态类。通过调用setStyle方法,可以很容易地在运行时将图标分配给按钮: var btn:Button = new Button(); btn.setStyle("icon", CheckMark); 但是,如果您想在运行时更改图标,比如更改其alpha值,甚至在将其指定给按钮之前重新绘制像素,该怎么办
[Embed(source='icons/checkmark.png')]
private static var CheckMark:Class;
您将得到一个动态类。通过调用setStyle方法,可以很容易地在运行时将图标分配给按钮:
var btn:Button = new Button();
btn.setStyle("icon", CheckMark);
但是,如果您想在运行时更改图标,比如更改其alpha值,甚至在将其指定给按钮之前重新绘制像素,该怎么办
到目前为止,我还没有找到一个令人满意的答案……这是我能找到的唯一一个似乎很接近的答案: 他的解决方案包括一个自定义的“dynamiccon”类,该类用于按钮的图标设置,以及一个自定义按钮类,该类向按钮类添加一个方法来绘制动态图标 最终的结果是您能够将BitmapData发送到DynamicCon类,该类将显示在按钮中。因此,嵌入图像,实例化资产类,获取bitmapasset并根据需要进行修改,然后将bitmapData发送到图标
这是一个有趣的问题,似乎应该有一个更简单的解决方案,但这不会带来很多麻烦。我解决这个问题的方法是实现一个编程皮肤类,手动绘制图标本身。您可能需要做更多的工作来确保按钮计算出正确的大小,就像它有图标一样,即使它没有。您可能需要浏览按钮源代码来查看对图标的引用是如何存储的 我喜欢创建完全符合我要求的编程皮肤,然后使用有趣的CSS声明来修改状态,例如:
button.setStyle("customIconAlpha", .4);
当然,皮肤或自定义按钮类将具有:
var alpha:Number = getStyle("customIconAlpha") as Number;
(不确定是否必须键入该按钮)我发现编程外观的最大问题是按钮拒绝测量宽度/高度。我通过覆盖每个对象的get方法轻松解决了这个问题: 重写公共函数get width():编号{返回宽度;} 重写公共函数get height():编号{返回高度;} 在我的例子中,我需要在TabNavigator中修改按钮,因此没有简单的方法对按钮进行子类化。谢天谢地,每个皮肤的父级都是按钮,因此使用皮肤中的静态方法,您可以识别图标皮肤所属的按钮实例 如果您使用的是覆盖所有“图标”样式,将为每个状态创建一个新的蒙皮对象。因此,在更改图标的状态时,您需要记住这一点