在Flex移动应用程序中使用FXG图形可以使用MXML,但不能使用ActionScript

时间:2012-04-09 13:12:27

标签: flex flex4.5 flex-mobile flex4.6 fxg

我已阅读Adobe的文档Using FXGEmbedding application assets,但只能通过MXML嵌入FXG -

enter image description here

MyStars.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:ViewNavigatorApplication 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    firstView="views.Home">
</s:ViewNavigatorApplication>

Home.mxml(通过MXML嵌入FXG时工作正常):

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:comps="assets.*"
        title="Home">

    <comps:Star />
</s:View>

Star.fxg(位于src / assets / Star.fxg):

<?xml version='1.0' encoding='UTF-8'?>
<fxg:Graphic xmlns:fxg="http://ns.adobe.com/fxg/2008" version="2">    
    <fxg:Path x="9.399" y="10.049" data="M 82.016 78.257 L 51.895 69.533 L 27.617 89.351 L 26.621 58.058 L 0.231 41.132 L 29.749 30.52 L 37.714 0.241 L 56.944 24.978 L 88.261 23.181 L 70.631 49.083 Z">
        <fxg:fill>
            <fxg:SolidColor color="#FFFFFF"/>
        </fxg:fill>
        <fxg:stroke>
            <fxg:SolidColorStroke 
                caps="none" 
                color="#4769C4" 
                joints="miter" 
                miterLimit="4" 
                weight="20"/>
        </fxg:stroke>
    </fxg:Path>
</fxg:Graphic>

但是当我试图通过ActionScript(仍然在同一个Flex移动项目中)实现FXG图形时,我得到了编译错误:

enter image description here

Call to a possibly undefined method Star

Home.mxml:

<?xml version="1.0" encoding="utf-8"?>
<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark"
        xmlns:comps="assets.*"
        title="Home">

    <fx:Script>
        <![CDATA[
            import spark.core.SpriteVisualElement;

            private static const STAR:SpriteVisualElement = new Star();
        ]]>
    </fx:Script>  

<s:BitmapImage source="{STAR}" />
</s:View>

我还尝试了 import comps; 和/或 new comps.Star();

当我将FXG文件移动到 src / 并使用 xmlns:comps =“*”时,一切正常。

2 个答案:

答案 0 :(得分:1)

在ActionScript中导入Star,基于我认为的代码将是这样的:

import assets.Star
private static const STAR:SpriteVisualElement = new Star();

我怀疑会摆脱编译错误。但是,我不确定您是否可以使用SpriteVisualElement作为BitmapImage的源。您可能必须将SpriteVisualElement添加为父容器的子级,并使用Flex组件生命周期来执行此操作。

我已经做了一些实验,只是contributed this code to Apache FlexThe specific class is here。虽然,由于某种原因,我错过了FXG元素可能是SpriteVisualElements的事实。如果在ActionScript中创建组件,使用我的FXGImage类并不能免除您在ActionScript中调整组件大小和位置的责任。

答案 1 :(得分:1)

对于FXG图形,请注意您的图稿尺寸。使用FXG创建对象时,图标周围的空白区域会计数。确保将图稿大小设置为图标大小(图标周围没有额外的空白区域)。这样,当您嵌入到bitmapImage时,FXG资产看起来会更好。