thanks a ton Alex.. I don't see anything wrong with my avatarHolder's code.. still pasting the code here. Please see the code of "my avatarHolder" ..i think your thoughtful eyes can catch a loophole... I am just want my code to be seen by the experience ppl here.. as i don't have anything to validate it. so please help me out.. ----------------------------------------------
package { import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.net.URLRequest; import ms.imfusion.util.MsLogger; import mx.core.BitmapAsset; import mx.core.Container; import mx.core.UIComponent; import mx.states.RemoveChild; public class ImageHolder extends Container { private var loader:Loader; private var myBitmap:Bitmap; private var imageSrc:String; private var imageSprite:Sprite; private var request:URLRequest; private var uiComp:UIComponent function ImageHolder(){ super(); setStyle("borderColor","#989898"); setStyle("borderStyle","solid"); setStyle("borderAlpha","0"); setStyle("cornerRadius",3); setStyle("dropShadowEnabled","true"); createControls() } [Bindable] public function set imageSource(img:String):void{ try{ imageSrc = img; imageSprite = new Sprite(); //trace("before loading an image imageSrc : " + imageSrc); request = new URLRequest(imageSrc); loader.contentLoaderInfo.addEventListener( Event.COMPLETE, completeHandler); loader.contentLoaderInfo.addEventListener( IOErrorEvent.IO_ERROR,function (){ MsLogger.getInstance().Log(this,"URL not found"); }) loader.load(request); //trace("after loading an image imageSrc: " + imageSrc); imageSprite.visible = false; imageSprite.addChild(loader); } catch(e:Error){ MsLogger.getInstance().Log(this,e.message,"unable to load image"); } } public function unloadImage(){ //removeChild(uiComp) loader.unload(); } private function createControls():void{ imageSprite = new Sprite(); loader = new Loader(); } private function completeHandler(event:Event){ try{ //trace("completeHandler an image imageSrc : " + imageSrc); var loader:Loader = Loader(event.target.loader); var myBitmapData:BitmapData = Bitmap(loader.content ).bitmapData var myBitmapDataAsset:BitmapAsset = new BitmapAsset(myBitmapData); imageSprite.addChild(myBitmapDataAsset); uiComp = new UIComponent(); imageSprite.visible= true; uiComp.addChild(imageSprite) addChild(uiComp); this.visible = true; } catch(e:Error){ //trace("in completeHandler unable to load image"); MsLogger.getInstance().Log(this,e.message,"in completeHandler unable to load image"); } } override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{ super.updateDisplayList(unscaledWidth,unscaledHeight); if(uiComp!=null){ uiComp.x = (this.unscaledWidth - imageSprite.width )/2; uiComp.y = (this.unscaledHeight - imageSprite.height )/2; } } } } ---------------------------------------------- I will incorporate all your suggestion... and let me read the doc again... Thanks a ton.. I really appreciate your interest in solving our queries.. that helps a lot to dumbs like me... PS. On Feb 16, 2008 12:11 AM, Alex Harui <[EMAIL PROTECTED]> wrote: > Not bad for a first try. > > > > I would: > > 1) extend UIComponent instead of Canvas. You aren't using any of Canvas's > features so you'll save on size and performance > > 2) only call invalidateProperties() in the data setter. Move the code in > there to commitProperties instead. That'll probably remove the need for the > try/catch block. The way it is coded now, you'll get exceptions if the data > setter is run before child objects have been set up in createChildren > > 3) Move the positioning of your components to updateDisplayList(). > > 4) Calculate measuredWidth/Height in measure(), but you shouldn't set x,y > there as you may not actually be sized to your measured size and in general, > you'll probably want to react to that in updateDisplayList(). The measure > method should compute measuredWidth/Height from the > getExplicitOrMeasuredWidth/Height of the child components plus any spacing > and gap styles or properties. > > 5) not bother to set the avatarholder's imagesource in measure(). If > these are external images, they won't be measureable in measure() because > loading external images is asynchronous. > > > > I don't see any particular reason for why your images end up on the wrong > row. Maybe there's some problem with AvatarHolder? > > > > The 'template' for this is in our docs. I'm sure our doc team would love > to know why the docs weren't clear enough for you. > > > > -Alex > > > ------------------------------ > > *From:* [EMAIL PROTECTED] [mailto: > [EMAIL PROTECTED] *On Behalf Of *learner > *Sent:* Friday, February 15, 2008 12:52 AM > *To:* flexcoders@yahoogroups.com; [EMAIL PROTECTED] > *Subject:* [flexcomponents] simple renderer please help..........please > review it > > > > Hi all, > I am doing my constant effort to learn and make a decent item renderer for > a list .. > I have also attached a code that i have written for it... > please please have a look at it and tell me where i am doing wrong and > loopholes are... > > the problem that i am facing is ; > in my image holder the images are not shown properly ... meaning > sometimes the image from the different row gets displayed in the other row.. > I guessed that there is a way in which u can cache the bitmap in image > holder and things like that.. don't know in details ... > > can any body please suggest me the proper way to design a renderer for > this.. please review the following code... > > (Would be a great help if any body can design this properly for me...i > know its too much too ask.. but that will give me guideline and a sort of > template . > And I once for all ,will get the authentic way to make renderer...till > this time .. for me its just blind chess which has really exhausted me > ) > > Thanks > > my item rendere contains : > 1) image.. > 2) a text comming next to image > 3) a text comming below the text in 2) > > (Code file is attached) > package ms.messengermodule > { > import mx.containers.Canvas; > import mx.controls.Image; > import mx.controls.Label; > > public class ContactBox extends Canvas > { > > /*private var memberStatus:Label;*/ > > [Embed(source='style.swf', symbol='memberOnline')] > private var onlineIcon:Class; > > [Embed(source='style.swf', symbol='memberOffline')] > private var offlineIcon:Class; > > [Embed(source='ms/felix/css > > /assets/felixStyle.swf', symbol='memberBusy')] > private var busyIcon:Class; > > [Embed(source='style.swf', symbol='organizer')] > private var organizerIcon:Class; > > private var memberName:Label; > > private var memberDescription1:Label; > private var memberDescription2:Label; > private var memberDescription3:Label; > > private var avatarHolder:ImageHolder; > > private var description1:String; > private var description2:String; > private var description3:String; > > private var contactObject:ContactObject; > private var statusImage:Image; > private var statusIcon:Object; > private var memberNamestr:String; > private var userImage:String; > > /** > * Constructor > */ > function ContactBox() { > super(); > this.horizontalScrollPolicy = "off"; > this.verticalScrollPolicy = "off"; > > } > > override public function set data(value:Object):void { > try{ > super.data = value; > contactObject = value as ContactObject; > description1 = contactObject.extensionObject["E"]; // take > the value from some dictinory object > memberNamestr = contactObject.name.split(" ")[0]; > userImage = contactObject.imageUrl; // user image > statusIcon = ""; > getStatusIcon(); > invalidateProperties(); > } > catch(e:Error){ > trace(e.message); > } > } > > > > private function getStatusIcon():void { > if(contactObject.presence == Constants.Online_Presence){ > statusIcon = new onlineIcon() ; > } > if(contactObject.presence == Constants.offline_Presence){ > statusIcon = new offlineIcon(); > } > if(contactObject.presence == Constants.Busy_Presence){ > statusIcon = new busyIcon(); > } > } > > > > override protected function createChildren():void { > > avatarHolder = new ImageHolder(); > addChild(avatarHolder); > avatarHolder.height = 38; > avatarHolder.width = 38; > //avatarHolder.imageSource = ""; > > memberName = new Label(); > memberName.styleName = "NormalTextBoldSmall" > memberName.setStyle("color","0xbababa"); > memberName.text=""; > addChild(memberName); > > memberDescription1 = new Label(); > memberDescription1.styleName = "NormalText"; > memberDescription1.setStyle("fontWeight","normal"); > memberDescription1.text="" > addChild(memberDescription1); > > memberDescription2 = new Label(); > memberDescription2.styleName = "NormalTextSmall"; > memberDescription2.text="" > addChild(memberDescription2); > > memberDescription3 = new Label(); > memberDescription3.styleName = "NormalTextSmall"; > memberDescription3.text="" > addChild(memberDescription3); > > statusImage = new Image(); > addChild(statusImage); > statusImage.height = 10; > statusImage.width = 10; > super.createChildren(); > this.styleName="messengerlistRenderer"; > } > > > > > override protected function measure():void{ > //trace(" measure MemberBox"+ memberObject.name); > super.measure(); > memberName.text = memberNamestr//contactObject.name; > > avatarHolder.x = 0; > avatarHolder.y=0; > avatarHolder.imageSource = contactObject.imageUrl; > > memberName.width = 100 > memberDescription1.width = 150; > memberName.x = avatarHolder.width + avatarHolder.x + 4; > memberDescription1.htmlText = > description1//contactObject.discription1; > memberDescription1.x = memberName.x; > > memberDescription1.y = memberName.textHeight+5; > > var memberWidth:Number = (memberName.textWidth> > memberWidth)?memberWidth:memberName.textWidth > > statusImage.x = memberName.x + memberWidth+ 10; > statusImage.y = memberName.y + 5; > > > } > > override protected function commitProperties():void { > memberDescription1.htmlText = > description1//contactObject.extensionObjectArray[Constants.D_EVENT_NAME]; > memberName.text = contactObject.name; > statusImage.source = statusIcon; > avatarHolder.unloadImage(); > //avatarHolder.visible = false; > avatarHolder.imageSource = contactObject.imageUrl; > statusImage.source = statusIcon; > super.commitProperties(); > //trace(" commitProperties MemberBox"+ memberObject.name); > } > > > } > } > > Regards > PS > > >