PDA

Просмотр полной версии : Как правильно применять эффекты?


Powerhead
23.05.2007, 21:47
Друзья, подскажите, каким образом применить эффект Resize к какому-либо компоненту с графикой?
Я создаю канвас, рисую на нем circle и пытаюсь применить эффект - так не срабатывает. Только меняются границы канваса, но графика остается статичной.
Вот код

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="draw();">

<mx:Script>
<![CDATA[
import mx.containers.Canvas;
import mx.effects.Resize;

public function draw():void {

var myDiv:Canvas = new Canvas();

myDiv.width = 100;
myDiv.height = 100;
myDiv.setStyle('borderStyle', 'solid');
myDiv.setStyle('borderThickness', 1);
myDiv.setStyle('borderColor', 0x000000);
myDiv.graphics.lineStyle(2, 0x000000, 0.8);
myDiv.graphics.beginFill(0xFFFFFF, 0.6);
myDiv.graphics.drawCircle(100, 100, 100);
myDiv.graphics.endFill();
application.addChild(myDiv);

myDiv.scaleX = 0.5;

var res:Resize = new Resize();
res.target = myDiv;
res.widthTo = 250;
res.heightTo = 250;
res.duration = 700;
res.play();
}
]]>
</mx:Script>

</mx:Application>

miramax
23.05.2007, 23:13
help -> Creating and Extending Flex 2 Components -> Creating ActionScript Components -> Creating Advanced Visual Components in ActionScript -> Implementing the component -> Implementing the measure() method

Powerhead
24.05.2007, 15:12
Спасибо, большое, но я не могу разобраться, как мне этот метод может помочь?
Добавил:

myDiv.invalidateSize();
myDiv.measuredHeight = 100;
myDiv.measuredWidth = 100;

но ничего не меняется - эффект resize никаким образом не влияет на графику, нарисованную на канвасе.

miramax
24.05.2007, 15:43
Надо ещё почитать про updateDisplayList() и про createChildren() для завершённости.

etc
24.05.2007, 16:09
Расшифрую miramax-а: нужно создать свой компонент на основе того же UIComponent и реализовать перечисленные методы.

Powerhead
04.06.2007, 16:59
Спасибо, прочел.
В общем, получается так - если я применяю к канвасу эффект Resize, то, в течение действия эффекта, многократно дергается метод updateDisplayList(). Я могу в этом методе перерисовывать всю графику, в этом случае, эффект применяется и к нарисованной на канвасе графике. Но вычисление новых координат и размеров графических элементов получается слишком громоздким. А нет ли способа взять канвас, нарисовать на нем пару кружочков и линий, затем превратить его в некий спрайт, к которому можно применять эффекты ресайза и не париться на счет новых координат графических объектов?
Мне нужно достичь вот такого эффекта: http://www.powerhead.kiev.ua/Work/chart/
Подскажите наиболее простой способ этого добиться.

Powerhead
04.06.2007, 18:19
Грубо говоря, мне нужно сделать следующее - нарисовать многоугольник с заливкой а затем применить к нему эффект resize. Как проще всего это сделать?