替换元素中的图像

时间:2012-05-01 19:57:57

标签: flex

我是Flex和ActionScript的新手,但我的任务是根据查询字符串替换Flex页面上的元素。换句话说,用户可以传入一个参数,例如?image = dog.png,ActionScript将用用户传入的内容替换图像。整个页面都放在.mxml文件中。占位符图像(透明)需要由用户指定的内容替换。它们传入的图像将始终存在于SWF文件中。

我尝试过几件事,但都没有。例如,我尝试更改图像的来源):

view.BlankImage.source = "@Embed(source='/resources/myNewImage.png')";

我还尝试插入最初隐藏的图像,假设我可以在运行时将其显示出来。但Flex在页面格式中包含了隐藏的图像,因此即使我从未显示隐藏的图像,所有内容的放置也都会搞砸。

以下是相关的mxml:

<s:VGroup width="100%" bottom="0" horizontalAlign="right">
<mx:Image id="BlankSpot" source="@Embed(source='/resources/blank.medium.png')"
    visible="{!someParameter}" includeInLayout="{BlankSpot.visible}"/>
    <toolbars:SearchBox id="searchBox"/>
</s:VGroup>

知道如何在运行时替换图像吗?我需要提供更多信息吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

更多信息会有所帮助。我假设图像来自网络,并非都嵌入在应用程序中。

如果是这种情况,您可以将图片传递给新的.png。

尝试BlankSpot.source = "http://someurl.com/image.png

修改

由于您声明所有图片都嵌入了您的应用程序,因此您可以使用相对路径替换网址。

也许是这样的:

var img:String = "dog.png";
BlankSpot.source = "/resources/" + img;

如果您有一定数量的图像,您也可以预先定义和嵌入它们。处理此问题的一种好方法是创建一个包含所有嵌入资源的Resources类。

package {
    public final class Resources {
        [Embed (source="/resources/dog.png")] public static const DOG:Class;
      }
}

然后,您可以直接在图片的来源中使用它

BlankSpot.source = Resources.DOG;

由于<s:VGroup>,您似乎正在使用Flex 4,因此您也应切换到火花图像。

如果没有使用mx图像的特定原因,请用

替换该块
<s:Image id="BlankSpot" source="@Embed(source='/resources/blank.medium.png')"
visible="{!someParameter}" includeInLayout="{BlankSpot.visible}"/>