3

VGroup に要素を追加/削除するときは、スムーズに行う必要があり、アイテムのサイズを変更します。トランジション効果を使用する必要があると思います。しかし、どのように?

  1. アイテム(要素)レベルで?
  2. VGroupレベルで?
  3. 代わりに DataGroup を使用し、ItemRenderer レベルで実行する必要がありますか?

私はアイテムレベルでそれをやろうとしてきましたが、まだそれを機能させることができず、どういうわけか正しくないと感じています. より高いレベルで行う必要があるように感じます。

たとえば、アイテムのサイズを高さ = 0 に変更する「死亡」状態を定義しました。しかし、縮小した後、VGroup を削除するか、VGroup から自分自身を削除するには、何らかの方法で VGroup に通知する必要があります。不必要に複雑に感じます。

私が望んでいるのは、エフェクトを VGroup へのアイテムの挿入と削除に関連付ける方法ですか? 何か案は?

前もってありがとう、ヌーノ

4

2 に答える 2

3

私はこれを行うための適切な方法を見つけたと信じています。コンポーネントがVGroupの子として追加されたときに呼び出される、「addedEffect」と「removedEffect」の2つのイベントがあります。

<?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 に答える