Chinaunix首页 | 论坛 | 博客
  • 博客访问: 92696
  • 博文数量: 41
  • 博客积分: 2650
  • 博客等级: 少校
  • 技术积分: 680
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-23 16:26
文章分类

全部博文(41)

文章存档

2011年(1)

2008年(40)

我的朋友

分类:

2008-06-24 15:57:33


  行为能够使得应用程序对用户或者对程序设计动作更富有生气。比如,你可以使用行为设计让你的对话框在取得聚焦后轻微的弹起,或者在显示之后缓慢的退去。你可以在程序中的MXMLActionScript嵌入行为设计。即其包含两个部分:触发和效果。

关于行为

  一个行为是触发和效果的绑定。触发是一个动作,比如鼠标点击一个组件而取得聚焦,或者是一个组件变得可见。效果发生在组件上某一段时间内可见的或者可听见的改变,通常用milliseconds来计算。效果的例子如:退去(fading),尺寸调整(resizing),移动(moving)等。

你可以为一个时间触发定义多个效果。比如,一个宠物店的应用程序包含一个按钮控件用来选择宠物类别。当用户点击这个按钮控件,一个包含种类名称的窗口变得可见,当这个窗口变得可见的同时,这个窗口移动到屏幕的左下角位置,继而同时把大小从100 piexels调整到300piexls. Flex组件默认是没有效果显示的,所以你需要为每个组件配置每个触发对应的效果。

你可以通过使用MXMLActionScript创建,配置并且应用效果到Flex组件。使用MXML, 你必须把效果和触发关联起来作为应用程序的行为设计的一部分。比如:

xmlns:mx="">

id="myWL" duration="1000"/>

id="myButton" label="Click Me" mouseDownEffect="{myWL}"/>

id="myOtherButton" label="Click Me" mouseDownEffect="{myWL}"/>

这个例子中,使用的效果是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控件来设定zoomHeightTozoomWidthTo属性。这两个属性分别指定了完成Zoom效果的一个比例。其值在0.01.0之间,默认的为1.0,这个是对象的一般大小:

zoomHeightTo="{Number(zoomHeightInput.text)}"

zoomWidthTo="{Number(zoomWidthInput.text)}"

/>

默认的,TextInputtext属性的值为1.0,用户可以自行指定大小。

中使用styles的行为设计

所有的MXML属性对应的效果触发都实现了CSS Styel.因此,你也可以使用来运用效果。比如,你可以为程序中所有的TExtArea控件设置mouseDownEffect的属性值,你可以使用CSS类型选择器:

TextArea { mouseDownEffect: slowWipe; }

text="This TextArea slowly wipes in."

/>

text="This TextArea control has no effect."

mouseDownEffect="none"

/>

          在组件标签中设定的mouseDownEffect属性值重写了中设定的任何设置。假如你要移除定义在类型选择器中的效果,你可以显示设置任何触发器的值为none.比如:

你可以可使用类选择器来使用效果:

.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;

}

]]>

 

阅读(270) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~