网上的蜘蛛
分类: 系统运维
2008-06-01 15:27:20
行为能够使得应用程序对用户或者对程序设计动作更富有生气。比如,你可以使用行为设计让你的对话框在取得聚焦后轻微的弹起,或者在显示之后缓慢的退去。你可以在程序中的MXML和ActionScript嵌入行为设计。即其包含两个部分:触发和效果。
关于行为
一个行为是触发和效果的绑定。触发是一个动作,比如鼠标点击一个组件而取得聚焦,或者是一个组件变得可见。效果发生在组件上某一段时间内可见的或者可听见的改变,通常用milliseconds来计算。效果的例子如:退去(fading),尺寸调整(resizing),移动(moving)等。
你可以通过使用MXML和ActionScript创建,配置并且应用效果到Flex组件。使用MXML, 你必须把效果和触发关联起来作为应用程序的行为设计的一部分。比如:
这个例子中,使用的效果是wipeLeft,持续时间是1000ms.即同效果的开始到结束用了1000ms.
你还可以通过数据绑定的方法把效果赋给按钮控件的mouseDownEffect属性。mouseDownEffect这个属性是一个效果触发用来指定当用户点击控件时显示效果。前面的例子中,效果使得按钮控件从右到左的擦除显示。
你可以可以使用ActionScript创建,修改和显示效果。你可以为每一个触发配置不同的效果,也可以显示的调用paly()方法来执行效果的显示。ActionScript使得你能够用户的喜好来设定效果,或者根据用户的操作来修改效果。举例:
creationComplete="createEffect(event);" >
// Import the effect class.
import mx.effects.*;
// Define effect variable.
private var myWL:WipeLeft;
private function createEffect(eventObj:Event):void {
// Create the WipeLeft effect object.
myWL=new WipeLeft();
// Set the effect duration.
// Assign the effects to the targets.
myButton.setStyle('mouseDownEffect', myWL);
myOtherButton.setStyle('mouseDownEffect', myWL);
}
]]>
这个例子显示了使用事件触发效果。如果想要效果按照程序规划来显示,那么你可以调用paly()方法。
Flex利用两个类的架构,工厂类和实例类来实现效果。
工厂类创建了实例类的对象来展现目标组件的效果。你可以在程序中创建工厂类的实例,通过配置必要的属性来控制效果。你可以把工厂类的实例赋给目标组件的效果触发器:
按照规定,工厂类的名字就是效果的名字,比如Zoom或者Fade。
实例类实现了效果的逻辑。当一个效果触发,或者你调用了paly()方法来调用效果,工厂类创建了实例类的对象来展现目标组件的效果。当效果结束时,Flex销毁实例对象。假如某个效果对应多个组件,那么工厂类创建多个实例对象,每个目标组件一个。
按照规定,实例类的名字就是效果类命ide加上后缀Instance,比如ZoomInstance或者FadeInstance.
关于Flex效果类的层次结构,可以参考develop guide.这里不介绍了。Flex可用的效果包括:AnimateProperty, Blur, Bissolve, Fade, Glow, Iris, Move, Pause, Resize, Rotate, SoundEffect, WipeLeft, WipeRight,WipeUp,WipeDown, Zoom.具体使用参考开发文档。可用的触发包括如下; addedEffect, creationCompleteEffect, foucusInEffect…参考开发文档。Page565.
在MXML中,你使用触发器的名字作为MXML组件标记中的一个属性来配置组件的显示效果。比如,要配置Button控件的WipeLeft效果,你可以使用mouseDownEffect触发属性作为
下个例子中,你将创建两个可变大小的效果的按钮控件,其中一个效果是当用户按下按钮时把按钮的大小扩展10pexels,另外一个效果是当放开鼠标时重新回复到按钮原来的大小。持续时间为200ms.
widthBy="50" heightBy="50"
duration="200"
/>
widthBy="-50" heightBy="-50"
duration="200"
/>
label="Click Me"
mouseDownEffect="{myResizeUp}"
mouseUpEffect="{myResizeDown}"
/>
在MXML中你可以使用数据绑定来设置效果的属性。比如,一下的例子就是让用户使用TextInput控件来设定zoomHeightTo和zoomWidthTo属性。这两个属性分别指定了完成Zoom效果的一个比例。其值在0.0和1.0之间,默认的为1.0,这个是对象的一般大小:
zoomHeightTo="{Number(zoomHeightInput.text)}"
zoomWidthTo="{Number(zoomWidthInput.text)}"
/>
默认的,TextInput的text属性的值为1.0,用户可以自行指定大小。
所有的MXML属性对应的效果触发都实现了CSS Styel.因此,你也可以使用
TextArea { mouseDownEffect: slowWipe; }
text="This TextArea slowly wipes in."
/>
text="This TextArea control has no effect."
mouseDownEffect="none"
/>
在组件标签中设定的mouseDownEffect属性值重写了
你可以可使用类选择器来使用效果:
.textAreaStyle { mouseDownEffect: WipeLeft; }
styleName="textAreaStyle"
text="This TextArea control quickly wipes in."
/>
利用setSytel()和getStyle()使用定义在MXML中的行为
触发器的属性被实现为styles,因此,你可以使用setStyle()和getStyle()方法来控制触发器以及他们关联的效果。setStyle方法有一下的定义格式:
setStyle("trigger_name", effect)
trigger_name,是触发器属性的名字,比如mouseDownEffect.
Effect, 表示和触发器管理的效果。Effect的类型属于Effect对象。
getStyle()的设定如下:
getStyle("trigger_name"):return_type
参数属性同setStyle.
以下的例子显示如何使用getStyle()来使用定义的MXML的行为。其返回一个Effect对象,对性的类型决定与你所指定的效果类型。
private function displayStyle():void {
var s:String = String(myB.getStyle('mouseDownEffect').duration)
myTA.text = "mouseDownEffect duration: " + s;
}
private function changeStyle(n:Number):void {
myB.getStyle('mouseDownEffect').duration = n;
}
]]>