=波波日志 > flash/flex/fcs/AIR > 11.3.使用AddChildAction和RemoveChildAction=
[转]11.3.使用AddChildAction和RemoveChildAction
11.3.1. 问题
我想在播放transition 时能控制何时添加或删除子组件。
11.3.2. 解决办法
使用AddChildAction 和RemoveChildAction 标签分别控制子组件的添加和删除。
11.3.3. 讨论
AddChildAction 和RemoveChildAction 对象执行方式和SetPropertyAction 和SetPropertyStyle对象类似,它们包装了State 对象的功能,可在Transition 中使用,为了与Transition 中的并行(Parallel)或序列(Sequence)对象进行交互。
默认情况下State 中是通过AddChild 对象添加子组件的。为了控制何时子组件被添加或在添加和删除前播放某个特效,我们可以在执行序列中使用AddChildAction 代替State 中的AddChild 标签,例如下面的代码提供一个Transition 对象的执行顺序:
这个例子首先执行Fade 特效,然后移除子组件并添加新子组件。如果你在State 中使用AddChild,则子组件将在Fade 特效完成之前就被添加了。这个例子中是不会发生这样的事,通过使用AddChildAction,你可以控制子组件何时被添加进来。
还有RemoveChild 标签是用来控制何时移除组件,但不是删除组件,AddChildAction 的机理不是去自动调用remove 方法。要想移除子组件,你必须在State 中添加RemoveChild 对象:
完整代码如下:
我想在播放transition 时能控制何时添加或删除子组件。
11.3.2. 解决办法
使用AddChildAction 和RemoveChildAction 标签分别控制子组件的添加和删除。
11.3.3. 讨论
AddChildAction 和RemoveChildAction 对象执行方式和SetPropertyAction 和SetPropertyStyle对象类似,它们包装了State 对象的功能,可在Transition 中使用,为了与Transition 中的并行(Parallel)或序列(Sequence)对象进行交互。
默认情况下State 中是通过AddChild 对象添加子组件的。为了控制何时子组件被添加或在添加和删除前播放某个特效,我们可以在执行序列中使用AddChildAction 代替State 中的AddChild 标签,例如下面的代码提供一个Transition 对象的执行顺序:
+展开
-XML
<mx:Transition fromState="view" toState="edit">
<mx:Sequence>
<mx:Fade alphaFrom="1" alphaTo="0" duration="1000"
target="{viewCanvas}"/>
<mx:RemoveChildAction target="{viewCanvas}"/>
<mx:AddChildAction relativeTo="{this}">
<mx:target>
<mx:Canvas id="editCanvas"
addedToStage="editCanvas.includeInLayout =true"
removedFromStage="editCanvas.includeInLayout = false">
<mx:TextInput text="SAMPLE"/>
</mx:Canvas>
</mx:target>
</mx:AddChildAction>
</mx:Sequence>
</mx:Transition>
<mx:Sequence>
<mx:Fade alphaFrom="1" alphaTo="0" duration="1000"
target="{viewCanvas}"/>
<mx:RemoveChildAction target="{viewCanvas}"/>
<mx:AddChildAction relativeTo="{this}">
<mx:target>
<mx:Canvas id="editCanvas"
addedToStage="editCanvas.includeInLayout =true"
removedFromStage="editCanvas.includeInLayout = false">
<mx:TextInput text="SAMPLE"/>
</mx:Canvas>
</mx:target>
</mx:AddChildAction>
</mx:Sequence>
</mx:Transition>
这个例子首先执行Fade 特效,然后移除子组件并添加新子组件。如果你在State 中使用AddChild,则子组件将在Fade 特效完成之前就被添加了。这个例子中是不会发生这样的事,通过使用AddChildAction,你可以控制子组件何时被添加进来。
还有RemoveChild 标签是用来控制何时移除组件,但不是删除组件,AddChildAction 的机理不是去自动调用remove 方法。要想移除子组件,你必须在State 中添加RemoveChild 对象:
+展开
-XML
<mx:State name="edit">
<mx:RemoveChild target="{viewCanvas}"/>
</mx:State>
<mx:RemoveChild target="{viewCanvas}"/>
</mx:State>
完整代码如下:
+展开
-XML
<mx:HBox xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300" currentState="view">
<mx:transitions>
<mx:Transition fromState="view" toState="edit">
<mx:Sequence>
<mx:Fade alphaFrom="1" alphaTo="0" duration="1000"
target="{viewCanvas}"/>
<mx:RemoveChildAction target="{viewCanvas}"
effectStart="trace('removing')"/>
<mx:AddChildAction relativeTo="{this}">
<mx:target>
<mx:Canvas id="editCanvas"
addedToStage="editCanvas.
includeInLayout = true"
removedFromStage="editCanvas.includeInLayout = false">
<mx:TextInput text="SAMPLE"/>
</mx:Canvas>
</mx:target>
</mx:AddChildAction>
<mx:SetPropertyAction target="{editCanvas}"
name="includeInLayout" value="true"/>
<mx:SetPropertyAction target="{editCanvas}"
name="alpha" value="1"/>
<mx:Glow color="0xffff00" blurXTo="30" blurYTo="30"
blurXFrom="0" blurYFrom="0" duration="1000" target="{this}"/>
<mx:Glow color="0xffff00" blurXTo="30" blurYTo="30"
blurXFrom="0" blurYFrom="0" duration="1000"
target="{editCanvas}"/>
</mx:Sequence>
</mx:Transition>
<mx:Transition fromState="edit" toState="view">
<mx:Sequence>
<mx:Fade alphaFrom="1" alphaTo="0" duration="1000"
target="{editCanvas}"/>
<mx:RemoveChildAction target="{editCanvas}"/>
<mx:AddChildAction relativeTo="{this}"
effectStart="trace('removing')">
<mx:target>
<mx:Canvas id="viewCanvas"
addedToStage="viewCanvas.includeInLayout =
true" removedFromStage="viewCanvas.includeInLayout = false">
<mx:Text text="DIFFERENT TEXT"/>
</mx:Canvas>
</mx:target>
</mx:AddChildAction>
<mx:SetPropertyAction target="{viewCanvas}"
name="includeInLayout" value="true"/>
<mx:SetPropertyAction target="{viewCanvas}"
name="alpha" value="1"/>
<mx:Glow color="0xffff00" blurXTo="30" blurYTo="30"
blurXFrom="0" blurYFrom="0" duration="1000"
target="{this}"/>
<mx:Glow color="0xffff00" blurXTo="30" blurYTo="30"
blurXFrom="0" blurYFrom="0" duration="1000"
target="{viewCanvas}"/>
</mx:Sequence>
</mx:Transition>
</mx:transitions>
<mx:states>
<mx:State name="view">
<mx:RemoveChild target="{editCanvas}"/>
</mx:State>
<mx:State name="edit">
<mx:RemoveChild target="{viewCanvas}"/>
</mx:State>
</mx:states>
<mx:ComboBox dataProvider="{['view', 'edit']}"
change="currentState = cb.selectedItem as String" id="cb"/>
</mx:HBox>
<mx:transitions>
<mx:Transition fromState="view" toState="edit">
<mx:Sequence>
<mx:Fade alphaFrom="1" alphaTo="0" duration="1000"
target="{viewCanvas}"/>
<mx:RemoveChildAction target="{viewCanvas}"
effectStart="trace('removing')"/>
<mx:AddChildAction relativeTo="{this}">
<mx:target>
<mx:Canvas id="editCanvas"
addedToStage="editCanvas.
includeInLayout = true"
removedFromStage="editCanvas.includeInLayout = false">
<mx:TextInput text="SAMPLE"/>
</mx:Canvas>
</mx:target>
</mx:AddChildAction>
<mx:SetPropertyAction target="{editCanvas}"
name="includeInLayout" value="true"/>
<mx:SetPropertyAction target="{editCanvas}"
name="alpha" value="1"/>
<mx:Glow color="0xffff00" blurXTo="30" blurYTo="30"
blurXFrom="0" blurYFrom="0" duration="1000" target="{this}"/>
<mx:Glow color="0xffff00" blurXTo="30" blurYTo="30"
blurXFrom="0" blurYFrom="0" duration="1000"
target="{editCanvas}"/>
</mx:Sequence>
</mx:Transition>
<mx:Transition fromState="edit" toState="view">
<mx:Sequence>
<mx:Fade alphaFrom="1" alphaTo="0" duration="1000"
target="{editCanvas}"/>
<mx:RemoveChildAction target="{editCanvas}"/>
<mx:AddChildAction relativeTo="{this}"
effectStart="trace('removing')">
<mx:target>
<mx:Canvas id="viewCanvas"
addedToStage="viewCanvas.includeInLayout =
true" removedFromStage="viewCanvas.includeInLayout = false">
<mx:Text text="DIFFERENT TEXT"/>
</mx:Canvas>
</mx:target>
</mx:AddChildAction>
<mx:SetPropertyAction target="{viewCanvas}"
name="includeInLayout" value="true"/>
<mx:SetPropertyAction target="{viewCanvas}"
name="alpha" value="1"/>
<mx:Glow color="0xffff00" blurXTo="30" blurYTo="30"
blurXFrom="0" blurYFrom="0" duration="1000"
target="{this}"/>
<mx:Glow color="0xffff00" blurXTo="30" blurYTo="30"
blurXFrom="0" blurYFrom="0" duration="1000"
target="{viewCanvas}"/>
</mx:Sequence>
</mx:Transition>
</mx:transitions>
<mx:states>
<mx:State name="view">
<mx:RemoveChild target="{editCanvas}"/>
</mx:State>
<mx:State name="edit">
<mx:RemoveChild target="{viewCanvas}"/>
</mx:State>
</mx:states>
<mx:ComboBox dataProvider="{['view', 'edit']}"
change="currentState = cb.selectedItem as String" id="cb"/>
</mx:HBox>
类别:flash/flex/fcs/AIR 作者:转载 日期:2010-03-29 【评论:1】
- 零下一度
日期:2010-7-16 16:18:45 IP:121.28.*.*
讲的很好,很明白!谢了!管理员回复(2010-7-16 16:29:49)
不客气~~~常来光顾~
发表留言
百度赞助
同类热门博文
- ·As+lightbox+js实现..
- ·21.8.使用Cairngorm..
- ·13.1.为ArrayCollec..
- ·18.13.通过二进制So..
- ·22.7.使用ModuleLoa..
- ·JavaScript控制Flas..
- ·6.6.动态载入外部图..
- ·flash预加载进度条p..
博格Tag
- flash/flex/fcs/AIR(752)
- Asp.Net/C#/WCF(598)
- 操作系统及应用软件(376)
- JavaScript/Ajax(330)
- SQL及数据库(134)
- 黑客技术(115)
- Asp/VBScript(111)
- HTML/WML/CSS兼容/XML(102)
- PHP/apache/Perl(96)
- 网站排名及优化(96)
- 其他(75)
- showbo日志(66)
- lucene.net/分词技术(33)
- 计算机网络(26)
- 机械重工(26)
- C#设计模式(25)
- Google Maps开发(17)
- 日语学习(15)
- Canvas/VML/SVG(13)
- linux(11)
- 游戏开发(8)
- 正则表达式(5)
- Jsp/Java(4)
最新博文
- ·PHP socket套接字学..
- ·Warning Cannot sen..
- ·php与flash as3 soc..
- ·Flash XMLSocket使用..
- ·给flash右键增加自定..
- ·flash控件html及col..
- ·Flash加载XML文件CD..
- ·Flex3中文教程--hom..
随机博文
