Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   BitmapImage не рассылает события (http://www.flasher.ru/forum/showthread.php?t=208838)

djyamato 06.09.2014 20:38

BitmapImage не рассылает события
 
Здравствуйте
В AS ItemRenderer-е добавляю в качестве child BitmapImage.
Добавляю слушателей к нему тут же в createChildren

В переопределенном методе set data устанавливаю что загружать, но ничего не загружается, и не рассылаются события элеменотом.
Где я ошибся ?
Код AS3:

package swiz.views.components.itemRenderers
{
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.events.HTTPStatusEvent;
        import flash.events.IOErrorEvent;
        import flash.filters.DropShadowFilter;
 
        import mx.core.UIComponent;
        import mx.core.mx_internal;
 
        import spark.components.Group;
        import spark.components.LabelItemRenderer;
        import spark.components.VGroup;
        import spark.components.supportClasses.StyleableTextField;
        import spark.primitives.BitmapImage;
 
        import swiz.model.AppSettings;
 
        public class ExcurtionIR extends LabelItemRenderer
        {
                protected var background:Sprite;
                protected var bitmapBackground:Sprite;
                protected var bitmap:BitmapImage;
                protected var nameLabelDisplay:StyleableTextField;
 
                public function ExcurtionIR()
                {
                        super();
                }
 
                override public function set data(value:Object):void
                {
                        super.data = value;       
 
                        if(data)
                        {
                                if(nameLabelDisplay)
                                {
                                        nameLabelDisplay.text = data.label;       
                                }
                                if(bitmap)
                                {
                                        trace("loading icon="+data.icon);
                                        bitmap.source = data.icon;
                                }
                        }
                }
 
                protected function bitmapLoadCompleteHandler(event:Event):void
                {
                        trace("icon loaded");
                }
 
                protected function bitmapErrorHandler(event:IOErrorEvent):void
                {
                        trace("ERROR : "+event.text);
                }
 
                protected function bitmapHttpStatusHandler(event:HTTPStatusEvent):void
                {
                        trace("http status "+event.status);
                }
 
                override protected function createChildren():void
                {
                        trace("create children");
                        background = new Sprite();
                        addChild(background);
 
                        background.filters = [new DropShadowFilter(2,2,45,.3)];
 
                        bitmapBackground = new Sprite();
                        addChild(bitmapBackground);
                        bitmapBackground.graphics.beginFill(0x000000);
 
                        bitmapBackground.graphics.drawRect(0,0,AppSettings.excurtionIRHeight,AppSettings.excurtionIRHeight);
                        bitmapBackground.graphics.endFill();
 
                        bitmap = new BitmapImage();
                        bitmap.scaleMode = "letterbox";
                        var biContainer:Group = new Group();
                        biContainer.addElement(bitmap);
                        bitmapBackground.addChild(biContainer);
 
                        bitmap.addEventListener(IOErrorEvent.IO_ERROR,bitmapErrorHandler);
                        bitmap.addEventListener(Event.COMPLETE,bitmapLoadCompleteHandler);
                        bitmap.addEventListener(HTTPStatusEvent.HTTP_STATUS,bitmapHttpStatusHandler);
 
                        super.createChildren();
 
                        labelDisplay.multiline = true;
                        labelDisplay.wordWrap = true;
 
                        labelDisplay.setStyle("color",0x529257);
                        labelDisplay.setStyle("fontSize",AppSettings.excurtionIRNameFontSize);
                        labelDisplay.setStyle("textAlign","center");
 
                        invalidateProperties();
                        invalidateSize();
                        invalidateDisplayList();
                }
 
                override protected function measure():void
                {
                        super.measure();
                        measuredHeight = bitmapBackground.height + AppSettings.excurtionIRPaddingTop*2;                   
                }
 
                override protected function drawBackground(unscaledWidth:Number, unscaledHeight:Number):void
                {   
                        background.graphics.beginFill(0xffffff);
                        background.graphics.drawRect(0,0, unscaledWidth - AppSettings.excurtionIRPaddingTop*2,AppSettings.excurtionIRHeight+AppSettings.excurtionIRPaddingTop);
                        background.graphics.endFill();
                }
 
                override protected function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void
                {
                        super.layoutContents(unscaledWidth, unscaledHeight);
                        // layout all the subcomponents here             
                        //bitmapBackground.x = AppSettings.excurtionIRPaddingTop * 1.5;
                        //bitmapBackground.y = AppSettings.excurtionIRPaddingTop/2;
 
                        setElementSize(bitmap,AppSettings.excurtionIRHeight,AppSettings.excurtionIRHeight);
                        setElementSize(labelDisplay,unscaledWidth - (AppSettings.excurtionIRHeight + AppSettings.excurtionIRPaddingTop*14), unscaledHeight);
                        setElementPosition(labelDisplay,AppSettings.excurtionIRHeight+AppSettings.excurtionIRPaddingTop*2 ,AppSettings.excurtionIRPaddingTop * 3);
                }
 
        }
}


ShockWave512 07.09.2014 01:15

Загрузите через Loader.

Кстати никаких событий этот класс не рассылает судя по доке.
http://help.adobe.com/ru_RU/FlashPla...l#eventSummary

djyamato 07.09.2014 01:57

Цитата:

Сообщение от ShockWave512 (Сообщение 1171633)
Загрузите через Loader.

Кстати никаких событий этот класс не рассылает судя по доке.
http://help.adobe.com/ru_RU/FlashPla...l#eventSummary

рассылает, рассылает
Код гляньте этого BitmapImage

Вопрос с событиями решен, я вложил BitmapImage в spark.primitives.Graphics и все заработало (картинка загружается, срабатывает событие COMPLETE), но не отображается картинка

Код AS3:

override protected function createChildren():void
{
...................................................
bitmap = new BitmapImage();
bitmap.scaleMode = "letterbox";
var biGraphics:Graphic = new Graphic();
biGraphics.addElement(bitmap);
addChild(biGraphics);
}


ShockWave512 07.09.2014 02:06

ааа, апаш! ясно!

кстати зачем все эти сложности с BitmapImage? Ведь вы используете LabelItemRenderer, он как бы не предназначен для работы со spark компонентами как контейнер. Загрузите лоадером и шлепните простой Bitmap.

Кстати может по этому и не отображается после загрузки, нет нормальной обвязки для жизненного цикла.

djyamato 07.09.2014 02:22

Почему он не предназначен для работы со спарк компонентами ?

Код AS3:

public class LabelItemRenderer extends UIComponent
    implements IDataRenderer, IItemRenderer
{
}

Дело не в том от чего унаследован рендерер, я думаю

ShockWave512 07.09.2014 02:29

Ну так это не спарк контейнер, его нужно наследовать от например Group
http://help.adobe.com/en_US/FlashPla...ropertySummary

просто addChild() тут не поможет, спарк компонент нужно добавлять через addElement()

djyamato 07.09.2014 14:06

да, действительно, упустил это из вида, спасибо.


Часовой пояс GMT +4, время: 01:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.