3

在向/从 VGroup 添加/删除元素时,我需要它顺利进行,调整项目的大小。我相信我必须使用过渡效果。但是怎么做?

  1. 在项目(元素)级别?
  2. 在 VGroup 级别?
  3. 我应该改用 DataGroup 并在 ItemRenderer 级别进行吗?

我一直在尝试在项目级别上做到这一点,但我仍然没有设法让它发挥作用,而且不知何故感觉不对。感觉应该在更高的水平上完成。

例如,我定义了一个“死亡”状态,它将项目的大小调整为 height=0。但是,在它缩小之后,它必须以某种方式通知 VGroup 以便将其从 VGroup 中删除或删除。感觉不必要的复杂。

我希望的是一种将效果与从 VGroup 中插入和删除项目相关联的方法?有任何想法吗?

在此先感谢,努诺

4

2 回答 2

3

我相信我找到了正确的方法来做到这一点。有两个事件“addedEffect”和“removedEffect”当一个组件被添加为一个 VGroup 的子元素时被调用。

<?xml version="1.0" encoding="utf-8"?>
<s:Group xmlns:fx="http://ns.adobe.com/mxml/2009" 
         xmlns:s="library://ns.adobe.com/flex/spark" 
         xmlns:mx="library://ns.adobe.com/flex/mx" 
         width="100%"
         addedEffect="{addedEffect}" 
         removedEffect="{removedEffect}" 
         clipAndEnableScrolling="true" xmlns:gui="gui.*">

  <fx:Declarations>

    <s:Sequence id="addedEffect" targets="{[this, callWindow]}">
      <s:Move duration="300" xTo="0" target="{callWindow}" />
    </s:Sequence>

    <s:Sequence id="removedEffect" targets="{[this, callWindow]}">
      <s:Move duration="300" xFrom="0" xTo="300" target="{callWindow}" />
      <s:Scale target="{this}"
               scaleYFrom="1.0" scaleYTo="0.0" 
               duration="300"/>
    </s:Sequence>

  </fx:Declarations>

  <gui:CallWindow id="callWindow"
                     width="100%" minHeight="0" x="300" />

</s:Group>

所以它是在项目级别完成的,但是有一种优雅的方法可以做到这一点。

谢谢,努诺

于 2011-04-22T10:27:37.820 回答
2

我已将以下代码放在 HGroup 中(对于 VGroup 将完全相同),以便在将组件添加到面板/容器时调整大小效果,可以为您指明正确的方向。您可以通过以下链接看到它的工作原理:

http://bbishop.org/blog/?p=448

public class ComboContainer extends HGroup
    {
        private var resizeEffect:Resize;
        private var fadeEffect:Fade;

        private var defaultHeight:int = 50;

        public function ComboContainer()
        {
            super();
            this.height 0;
            this.verticalAlign = flashx.textLayout.formats.VerticalAlign.MIDDLE;    
            this.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete);
        }

        private function onCreationComplete(event:Event):void{

            resizeEffect = new Resize();
            resizeEffect.heightFrom = 0;
            resizeEffect.heightTo = defaultHeight;
            resizeEffect.duration = 200;

            fadeEffect = new Fade();
            fadeEffect.alphaFrom = 0;
            fadeEffect.alphaTo = 1;
            fadeEffect.duration = 200;

            fadeEffect.play([this]);
            resizeEffect.play([this]);
        }
于 2011-04-20T15:11:08.617 回答