flex 4 - 图像未添加到 UIComponenet

发布于 2024-12-09 14:00:31 字数 3810 浏览 0 评论 0原文

我正在尝试将图像动态加载到图像控件,然后将其添加到精灵并将精灵添加到 UIComponent。

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
           applicationComplete="init()">
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
<fx:int id = "_rows" />
<fx:int id = "_cols" />     

</fx:Declarations>
<s:layout>
    <s:VerticalLayout>

    </s:VerticalLayout>

</s:layout>
<fx:Script>
    <![CDATA[
        import as3isolib.geom.Pt;
        import as3isolib.utils.IsoDrawingUtil;

        import mx.controls.Alert;
        import mx.core.IVisualElement;

        private var sprite:Sprite;
        [Binable]
        private var imgUrl:String = "http://localhost/greenrev/images//marketitems/menu_houses.png";
        //[Bindable]
//          private var _rows:int = 1;
//          //[Bindable]
//          private var _cols:int = 1;
        private var _cellSize:int=40;

        private function init(){

            sprite = new Sprite();
            //Alert.show(sprite.numChildren.toString());
            imgContainer.addChild(sprite);
            //Alert.show(sprite.numChildren.toString());

            loadImage(imgUrl);

        }

        private function loadImage(url:String):void{

            //img.source = url;
            img.load(url);

        }

        private function loadingComplete(event:Event):void{

            if (sprite.numChildren>0){
                sprite.removeChildAt(0);
            }

            sprite = new Sprite();
            sprite.addChild(img);
            sprite.cacheAsBitmap = true;
            sprite.graphics.clear();
            sprite.graphics.beginFill(0xffff00, 0.3);
            _rows = int(rows.text);
            _cols = int(cols.text);
            Alert.show(_rows.toString() + "," + _cols.toString());
            IsoDrawingUtil.drawIsoRectangle(sprite.graphics,new Pt(0,0),_cellSize * _rows,_cellSize * _cols);
            sprite.graphics.endFill();

            if (imgContainer.numChildren>0){
                imgContainer.removeChildAt(0);
            }

            imgContainer.addChild(sprite);
//              imgContainer.addChild(img);
            //Alert.show("loading complete");

        }

        private function loadingFail(event:IOErrorEvent):void{

            Alert.show(event.text);

        }

    ]]>
</fx:Script>
<s:BorderContainer id="main"  verticalCenter="-244" horizontalCenter="-422" width="80%" height="90%">
    <s:layout>
        <s:VerticalLayout verticalAlign="middle" horizontalAlign="center">

        </s:VerticalLayout>
    </s:layout>
    <s:BorderContainer>
        <mx:UIComponent id="imgContainer">

        </mx:UIComponent>
    </s:BorderContainer>

    <s:BorderContainer>
        <s:layout>
            <s:HorizontalLayout>

            </s:HorizontalLayout>
        </s:layout>
        <s:VGroup>
            <s:TextInput id="rows"  minWidth="100" text = "{_rows}"/>
            <s:TextInput id = "cols" minWidth="100" text = "{_cols}"/>
            <s:TextInput id = "txtImgUrl" minWidth="400" text="{imgUrl}"/>
            <s:Button label="Refresh" click="loadImage(imgUrl)"/>

        </s:VGroup>


    </s:BorderContainer>

</s:BorderContainer>

<mx:Image id="img" complete="loadingComplete(event)" visible="true" ioError="loadingFail(event)">

</mx:Image>

</s:Application>

我不知道为什么图像没有显示。正如您所看到的,我正在尝试在 COMPLETE 事件发生后添加图像。请帮忙

I am trying to load an image dynamically to the Image control and then add it to a sprite and add the sprite to the UIComponent.

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
           xmlns:s="library://ns.adobe.com/flex/spark" 
           xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"
           applicationComplete="init()">
<fx:Declarations>
    <!-- Place non-visual elements (e.g., services, value objects) here -->
<fx:int id = "_rows" />
<fx:int id = "_cols" />     

</fx:Declarations>
<s:layout>
    <s:VerticalLayout>

    </s:VerticalLayout>

</s:layout>
<fx:Script>
    <![CDATA[
        import as3isolib.geom.Pt;
        import as3isolib.utils.IsoDrawingUtil;

        import mx.controls.Alert;
        import mx.core.IVisualElement;

        private var sprite:Sprite;
        [Binable]
        private var imgUrl:String = "http://localhost/greenrev/images//marketitems/menu_houses.png";
        //[Bindable]
//          private var _rows:int = 1;
//          //[Bindable]
//          private var _cols:int = 1;
        private var _cellSize:int=40;

        private function init(){

            sprite = new Sprite();
            //Alert.show(sprite.numChildren.toString());
            imgContainer.addChild(sprite);
            //Alert.show(sprite.numChildren.toString());

            loadImage(imgUrl);

        }

        private function loadImage(url:String):void{

            //img.source = url;
            img.load(url);

        }

        private function loadingComplete(event:Event):void{

            if (sprite.numChildren>0){
                sprite.removeChildAt(0);
            }

            sprite = new Sprite();
            sprite.addChild(img);
            sprite.cacheAsBitmap = true;
            sprite.graphics.clear();
            sprite.graphics.beginFill(0xffff00, 0.3);
            _rows = int(rows.text);
            _cols = int(cols.text);
            Alert.show(_rows.toString() + "," + _cols.toString());
            IsoDrawingUtil.drawIsoRectangle(sprite.graphics,new Pt(0,0),_cellSize * _rows,_cellSize * _cols);
            sprite.graphics.endFill();

            if (imgContainer.numChildren>0){
                imgContainer.removeChildAt(0);
            }

            imgContainer.addChild(sprite);
//              imgContainer.addChild(img);
            //Alert.show("loading complete");

        }

        private function loadingFail(event:IOErrorEvent):void{

            Alert.show(event.text);

        }

    ]]>
</fx:Script>
<s:BorderContainer id="main"  verticalCenter="-244" horizontalCenter="-422" width="80%" height="90%">
    <s:layout>
        <s:VerticalLayout verticalAlign="middle" horizontalAlign="center">

        </s:VerticalLayout>
    </s:layout>
    <s:BorderContainer>
        <mx:UIComponent id="imgContainer">

        </mx:UIComponent>
    </s:BorderContainer>

    <s:BorderContainer>
        <s:layout>
            <s:HorizontalLayout>

            </s:HorizontalLayout>
        </s:layout>
        <s:VGroup>
            <s:TextInput id="rows"  minWidth="100" text = "{_rows}"/>
            <s:TextInput id = "cols" minWidth="100" text = "{_cols}"/>
            <s:TextInput id = "txtImgUrl" minWidth="400" text="{imgUrl}"/>
            <s:Button label="Refresh" click="loadImage(imgUrl)"/>

        </s:VGroup>


    </s:BorderContainer>

</s:BorderContainer>

<mx:Image id="img" complete="loadingComplete(event)" visible="true" ioError="loadingFail(event)">

</mx:Image>

</s:Application>

I have no clue why the image is not being shown. Like you can see, I am trying to add the image after the COMPLETE event occurs. Please help

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

勿忘心安 2024-12-16 14:00:32

将 URL 更改为“http://horses-bg.net/wp-content/uploads/2009/11/2752_beloved-horses.jpg”,图像出现了。
我还注释掉了 IsoDrawingUtil.drawIsoRectangle(..) 因为我没有您正在使用的库。
问题可能出在您的 URL 或 IsoDrawingutil 中:]

希望这会有所帮助,

祝您好运!

火焰

I changed the URL to "http://horses-bg.net/wp-content/uploads/2009/11/2752_beloved-horses.jpg" and the image appeared.
I've also commented out the IsoDrawingUtil.drawIsoRectangle(..) cause i don't have the lib you're using.
The problem might be in your URL or in that IsoDrawingutil thing :]

Hope this helps,

Good luck!

Blaze

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文