Well, I wouldn't say "NEVER".  I can put an Image in a UIComponent and
just have to make sure I call setActualSize on the image.
 
Another rule is Flex is that Navigator children must be Containers,
Container children must be IUIComponents, and UIComponent children can
be anything.
 
Yet another rule is that UIComponents must be parented by other
UIComponents, unless you do some patching up of things.  So parenting an
Image in a Sprite isn't likely to work and I would advise against it
unless  you have a good reason and want to do the work of patching up
everything else.
 
You can draw those graphics in a UIComponent so I would have grouphandle
subclass UIComponent and not Sprite.

________________________________

From: [email protected] [mailto:[EMAIL PROTECTED] On
Behalf Of Michael Schmalle
Sent: Friday, August 01, 2008 9:35 AM
To: [email protected]
Subject: Re: [flexcoders] Re: problem adding images to UIComponents
using AS3



Hi,

The original question of this long thread was 'Why can't I get the
mx.controls.Image component to display correct in a UIComponent
wrapper".

The easy answer to this all is, UIComponent's updateDislayList() method
does NO sizing of it's children. This is what containers do, using
whatever layout algorithm you give them.

Unless you subclass and override measure() and updateDisplayList() in
UIComponent, you WILL NEVER get an Image component to be show. This is
because nothing is calling setActualSize() on the UIComponent's child...
the Image component.

Lang story short, this will never work, create a 'light' container impl
that measures and sizes you UIComponent children or use a Box or Canvas.

Mike


On Fri, Aug 1, 2008 at 12:12 PM, Laurent Cozic <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> > wrote:


        

        I didn't read the other replies, but in general I think it's not
a good idea to add a Flex component to a non-Flex object. You might be
able to get it to work by simulating the framework workflow - for
example, by manually calling all the "invalidateXX" methods, however
it's not a very clean approach.
        
        In this case, a better way would be to directly create an
instance of your embedded object and add it to the display list. I think
the syntax would be:
        
        var image:BitmapAsset = new _moveGroupImage() as BitmapAsset ; 
        this.addChild(image);
                    
        
         
        --
        Laurent Cozic
        
        Flash, Flex and Web Application development
        http://pogopixels.com <http://pogopixels.com>  


        ----- Original Message ----
        From: "Merrill, Jason" <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> >
        To: [email protected]
<mailto:[email protected]> 
        
        Sent: Friday, August 1, 2008 4:57:36 PM
        Subject: [flexcoders] Re: problem adding images to UIComponents
using AS3
        
        

        

        OK, let me back up here.  First, thanks to those who responded.
So I thought by isolating my problem with an example (heck, I'm not even
using Canvas) it would shed light on why this bug is occuring, but it
isn't unfortunately, I'm more or less confusing the real problem with
y'all. Sorry.  So maybe what I thought was the problem was instead
something else.  

        Here is my actual project code, and a description of the setup.
The problem is, the image is not getting attached to the sprite, even
though the sprite is showing up in the display list just fine (the
graphics draw from code - but the image doesn't show).  I know the path
to the image is right, I can use the same embed and new Image() code
elsewhere in my app to make the image appear.  Here is the code and the
setup in the application:

        package com.venice.view. network.grouping Tool 
        { 
                import flash.display. Sprite; 
                import mx.controls. Image; 
                
                public class GroupHandle extends Sprite 
                { 
                        public var id:int; 
                        
                        public const FILL_COLOR:uint = 0xffffff; 
                        public const FILL_ALPHA:Number = .5; 
                        public const STROKE_COLOR: uint = 0x000000; 
                        public const STROKE_THICKNESS: Number = 1; 
                        public const STROKE_ALPHA: Number = 1.0; 
                        public const SIZE:Number = 10; 
                        
                        [Embed(source = "/media/icons/ control_repeat_
blue.png")] 
                        [Bindable] 
                        private var _moveGroupImage: Class; 
                        
                        public function GroupHandle( ):void 
                        { 
                                //this works: 
                                graphics.clear( ); 
                                graphics.lineStyle( STROKE_THICKNESS ,
STROKE_COLOR, STROKE_ALPHA) ; 
                                graphics.beginFill( FILL_COLOR,
FILL_ALPHA); 
                                graphics.drawRect( -(SIZE/2) ,
-(SIZE/2), SIZE/2, SIZE/2); 
                                graphics.endFill( ); 
                                
                                //this doesn't: 
                                var icon:Image = new Image(); 
                                icon.source = _moveGroupImage; 
                                addChild(icon) ; 
                        } 
                } 
        } 

        This class, GroupHandle. as, which extends Sprite, is added in
the display list in my application as follows: 

        Application (main MXML)  > network (Panel based MXML component)
>groupsLayerUI (a UIComponent, necessary because it's added to a Panel
container) >groupingTool (.as class that extends Sprite) >groupHandle
(.as class that extends Sprite)

        The groupsLayerUI UIComponent seems to be fine holding other
content, and even in the groupHandle, it renders drawn graphics just
fine. Just not the image. Even if I size the UIComponent, it doesn't
work.  It's not making any sense to me why this image doesn't appear in
this sprite, even though it will appear in other places in my app, and
even though other graphics in the sprite appear fine.  I thought maybe
it had something to do with also drawing on the same sprite, but that's
not it either, I removed that code and it still fails to load the
embedded image.  Can someone figure out what could be wrong?  Thanks.


        Jason Merrill
        Bank of America 
        Enterprise Technology & Global Risk L&LD
        Instructional Technology & Media 

        Join the Bank of America Flash Platform Developer Community 

        Are you a Bank of America associate interested in innovative
learning ideas and technologies?
        Check out our internal  GT&O Innovative Learning Blog &
subscribe. 



        




-- 
Teoti Graphix, LLC
http://www.teotigraphix.com <http://www.teotigraphix.com> 

Teoti Graphix Blog
http://www.blog.teotigraphix.com <http://www.blog.teotigraphix.com> 

You can find more by solving the problem then by 'asking the question'.


 

Reply via email to