我是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>
知道如何在运行时替换图像吗?我需要提供更多信息吗?
谢谢!
答案 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}"/>