PDA

Volledige versie bekijken : Resize probleem met custom flash component in Flex


Iceline
%Europe/Berlin %669 %2008, 17:04
Ik heb een flashcomponent gemaakt die een MovieClip extend en die publish ik daarna in een swc.
Daarna voeg ik hem in Flex in door hem bij de creationcomplete aan een UIComponent toe te voegen.
Tot zover verloopt alles prima maar als ik de breedte van het component verander dan zou de content van mijn component niet mogen veranderen van breedte en daar loopt het dus mis.

Bedankt.

Sjoedzj
%Europe/Berlin %611 %2008, 15:40
Ik neem aan dat je met 'het component' het UIComponent bedoelt en met 'mijn component' het component in je swc.

Welke width en height heb je gedefinieerd in je component en geef je nog iets mee als je het component toevoegd aan je UIComponent?

Kun je de code niet plaatsen?

Iceline
%Europe/Berlin %676 %2008, 17:14
<?xml version="1.0" encoding="utf-8"?>
<mx:UIComponent xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="init()" width="100%" height="100%">
<mx:Script>
<![CDATA[
import mx.events.ResizeEvent;
public var flashComp:MyMovieClip;
private function init():void {
flashComp = new MyMovieClip();
addChild(flashComp);
addEventListener(ResizeEvent.RESIZE,resizeHandler) ;
}

private function resizeHandler(event:Event):void {
flashComp.width = width;
flashComp.height = height;
}
]]>
</mx:Script>
</mx:UIComponent>

Hopelijk kom je hier wat mee verder. :)

TheDutch
%Europe/Berlin %335 %2008, 09:03
Je zult hier zelf functies voor moeten schrijven die het schalen van de parent (MyMovieClip) meten en hier de kinderen eventueel op aanpassen. Deze functionaliteit zit standaard in Flex (UIComponent) maar niet in ActionScript 3 (Sprite/MovieClip) :).

Iceline
%Europe/Berlin %408 %2008, 10:48
Ik heb een oplossing gevonden :)


package {
import flash.display.MovieClip;
import flash.display.Sprite;

public class MyMovieClip extends MovieClip {

private var applicationMask : Sprite;

public function MyMovieClip(){
applicationMask = new Sprite();
applicationMask.graphics.beginFill(0x000000);
applicationMask.graphics.drawRect(-500, -500, 1000, 1000);
addChild(applicationMask);
mask = applicationMask;
}

override public function set width(width:Number):void {
applicationMask.width = width;
}
override public function set height(height:Number):void {
applicationMask.height = height;
}
}
}


Zo kan je daadwerkelijk de breedte van je component aanpassen aangezien deze buiten de mask niets meer laat zien en je flex app gerust laat maar eenmaal je de breedte hebt aangepast zal de breedte van je MyMovieClip ook geupdate zijn aangezien 1 van zijn children zo breed is. Stel dat je children hebt die veel breder kunnen zijn is het ook mogelijk om een getter te schrijven die de waardes van de application mask returned.