0

我目前将嵌入式图像存储在 flex 库项目 (swc) 中,如下所示:

public class BitmapAssets
{
    [Embed(source="/assets/icon_160.png")]
    public static const icon_160:Class;
    [Embed(source="/assets/icon_240.png")]
    public static const icon_240:Class;
    [Embed(source="/assets/icon_240.png")]
    public static const icon_240:Class;
}

然后我参考其他项目中的图像。例如:

<s:Button>
    <s:icon>
        <s:MultiDPIBitmapSource source160dpi="{BitmapAssets.icon160}"
                                source240dpi="{BitmapAssets.icon240}"
                                source320dpi="{BitmapAssets.icon320}" />
    </s:icon>
</s:Button>

我想做的是将 MultiDPIBitmapSource 嵌入到库项目中;然后我可以将代码简化为:

<s:Button icon="{MultiDPIBitmapAssets.icon}" />

但是,我不知道如何嵌入一个填充了 source160/240/320 值的 MultiDPIBitmapSource 对象。

感激地收到任何解决方案;)

编辑:

作为“真正”嵌入的替代方案,我想知道 mxml 编译是否可以提供答案。例如,如果我有一个 mxml 声明:

<fx:declarations>
    <s:MultiDPIBitmapSource id="icon"
                            source160dpi="{BitmapAssets.icon160}"
                            source240dpi="{BitmapAssets.icon240}"
                            source320dpi="{BitmapAssets.icon320}" />
</fx:declarations>

然后mxml编译器会把它变成:

 var icon:MultiDPIBitmapSource = new MultiDPIBitmapSource();
 icon.source160dpi = BitmapAssets.icon160;
 icon.source240dpi = BitmapAssets.icon240;
 icon.source320dpi = BitmapAssets.icon320;

然后我可以根据需要引用它:

<s:Button icon="{MultiDPIBitmapAssets.icon}" />

从技术上讲,它不是嵌入式的。但出于实际目的,它是(至少在我看来)。问题是,我在哪里放置声明标签?我可以在 mxml 中定义一个非可视类吗?

4

1 回答 1

1

MultiDPIBitmapSource是在运行时创建的对象,而不是在编译时创建的。您将无法在应用程序中嵌入它的实例。

但是,您可以创建对对象的静态引用。它需要更多的代码,但每次需要使用它时编写的代码会更少。

public class Assets {
    private static var _asset:MultiDPIBitmapSource;

    public static function get asset():MultiDPIBitmapSource {
        if ( !_assets ) {
            _assets = new MultiDPIBitmapSource();
            _assets.source160 = "url";
            _assets.source240 = "url";
            _assets.source320 = "url";
            _assets.source480 = "url";
        }
        return _assets;
    }

}

然后使用它:

<s:Button icon="{Assets.asset}"/>

所以它基本上将源视为迷你单例。我个人不喜欢这种方法。您获得的唯一好处是每个类中的代码略少,但是您失去了灵活性,并且违背了一般的 OOP 实践。但它应该工作。

于 2013-10-16T16:12:42.713 回答