FLEX效果
Flex的行为机制使得开发者可以很方便地为应用程序添加动画效果,从而使用户界面更加丰富多彩。本章将介绍如何在Flex应用程序中创建行为及动画效果。
9.1 什么是行为
Flex中的行为(Behavior)是由触发器(Trigger)和效果(Effect)组合而成。当用户在界面中进行某项操作时,如单击某个按钮,触发器会被激活,从而使目标组件发生某些视觉或听觉上的变化,例如播放一段逐渐显示的动画或发出声响等。触发器可以由用户操作触发,也可以由程序触发,一个触发器可以对应多个效果。
9.1.1 触发器与效果
触发器的使用非常简单,可以作为MXML标记中的一个属性,也可以在标记中调用,或者在ActionScript中用setStyle()和getStyle()方法调用。触发器的名称为triggerEvent名称 + “Effect”后缀。按照这种名称约定,mouseDown事件的触发器名称为mouseDownEffect。Flex中提供的触发器名称包括以下几种。
l addedEffect:当组件添加到容器中时触发。
l creationCompleteEffect:组件创建完毕时触发。
l focusInEffect:组件获得焦点时触发。
l focusOutEffect:组件失去焦点时触发。
l hideEffect:当组件的visible属性更改为false时触发。
l mouseDownEffect:按下鼠标时触发。
l mouseUpEffect:释放鼠标时触发。
l moveEffect:组件移动时触发。
l removedEffect:组件被移除时触发。
l resizeEffect:组件改变大小时触发。
l rollOutEffect:鼠标从组件上移开时触发。
l rollOverEffect:鼠标移动到组件上时触发。
l showEffect:组件的visible属性更改为true时触发。
Flex的动画效果由一个工厂类(Factory)和一个实例类(Instance)构成。工厂类用来处理事件、控制动画,它的名称就是效果的名称,如Zoom。通常我们在应用程序中创建一个工厂类的实例,设置必要的参数,然后将该实例与触发器关联。实例类则用来实现动画效果,当触发器被触发或调用play()方法时,工厂类创建一个实例类的实例来播放所需效果,执行结束后,该实例会被销毁,如果一个效果对应多个目标对象,每一个目标对象都会有一个自己的实例。实例类的命名规则为效果名+Instance。如之前定义的工厂类名为Zoom,那么实例类名就是ZoomInstance。Effect的这种机制,是设计模式中工厂模式的一种应用,效果执行的时候,运行的不是Zoom,而是ZoomInstance。
9.1.2 简单效果组件
Flex中提供了丰富的效果组件。由于效果是一种根据时间渐变的过程,因此所有效果都具有duration属性,用来设置播放时间(以毫秒为单位)。也可以通过设置repeatCount属性和repeatDelay属性,来分别控制效果播放的次数和重复播放效果的时间间隔(以毫秒为单位)。如果希望在触发器被触发后,延迟一段时间调用效果,可以使用startDelay属性。
1)AnimateProperty动画效果
AnimateProperty是用来为组件的属性或样式设置动画的效果。我们可以通过其property属性设定目标对象上需要设置动画效果的属性,然后设置fromValue属性和toValue属性,为效果提供属性的起始值和结束值。例如下面的代码使用mouseDownEffect触发器,当单击图片时,触发AnimateProperty效果,在1秒钟内,Image对象的scaleX属性由1变为2,被横向拉伸。代码如下:
roperty}" />
如果希望通过样式设置效果,可以将isStyle属性设置为ture,然后通过setStyle()方法设置目标对象的样式,从而达到设置效果的目的。
2)Blur模糊效果
Blur 是一种模糊效果。该效果使用了flash.filters.BlurFilter滤镜,如果对某个组件应用了Blur 效果,就不能再对该组件应用BlurFilter滤镜,也无法再次应用Blur效果。下面的代码通过Image对象的mouseDownEffect触发器触发Blur效果,在1秒钟内,Image对象将逐渐变得模糊。代码如下:
blurYFrom="0.0" blurYTo="10.0"/>
3)Dissolve溶解效果
Dissolve是一种溶解效果。当效果开始播放时,将创建一个不透明的矩形,这个矩形悬浮在目标组件的上方,它的颜色由Dissolve.color属性设置,此时透明度为“1.0 – Dissolve.alphaFrom”。随着效果的播放,该矩形的alpha属性将从(1.0 – alphaFrom)逐渐变为“1.0 – alphaTo”,直到效果播放完成,矩形被销毁。
如果目标对象是一个容器,那么Dissolve效果将应用于容器内部的内容区域。
下面的代码使用一个CheckBox对象设置Image的visible属性,通过hideEffect和showEffect触发器分别触发各自的Dissolve效果:
hideEffect="{dissolveOut}" showEffect="{dissolveIn}"/>
4)Fade淡入淡出效果
Fade是一种淡入淡出效果,它通过设置组件的alpha属性来实现动画效果。当使用showEffect或hideEffect触发器设置Fade效果时,如果省略了alphaFrom和alphaTo属性的值,那么在showEffect触发器上目标对象的透明度将从 0变化到目标的当前alpha值,而在hideEffect触发器上则会从当前的alpha 值变化到0。如果要对字体使用Fade效果,必须使用嵌入字体。
下面的代码使用一个CheckBox对象设置Image的visible属性,通过hideEffect和showEffect触发器分别触发各自的Fade效果:
hideEffect="{fadeOut}" showEffect="{fadeIn}"/>
5)Glow发光效果
Glow是一种发光效果,该效果使用了flash.filters.GlowFilter滤镜类。如果对某个组件应用了Glow效果,就不能对该组件应用GlowFilter滤镜,也无法再次应用Glow效果。下面的代码通过Image对象的mouseDownEffect触发器触发Glow效果:
blurXFrom="0.0"blurXTo="50.0"blurYFrom="0.0"blurYTo="50.0"color="0x
00FF00"/>
6)Iris虹效果
Iris效果通过扩展或收缩集中在目标上的矩形遮罩为效果目标设置动画。该效果可以从目标的中心放大遮罩来显示目标,也可以向中心收缩遮罩来隐藏目标。下面的代码使用一个CheckBox对象设置Image的visible属性,通过hideEffect和showEffect触发器分别触发各自的Iris效果:
showEffect="{irisIn}" hideEffect="{irisOut}"/>
7)Move移动效果
Move效果用来实现移动动画。在给定时间内,组件的位置会随时间变化而变化。使用该效果通常需要用到以下几个属性。
l xFrom和yFrom属性用来指定初始位置。
l xTo和yTo属性用来指定目标位置。
l xBy和yBy用来指定移动量,即组件在x轴向和y轴向上的移动速度。
通常只需要指定初始位置、目标位置或移动量这些值中的任意2个, Flex就会计算第3个值。如果指定所有这3个值,Flex就会忽略xBy和yBy值。如果仅指定xTo和yTo值或xBy和yBy值,那么Flex会将xFrom和yFrom设置为对象的当前位置。
下面的程序演示了如何使用Move效果。
代码清单 MoveSample.mxml
"0"
layout="absolute" mouseDown="moveImage();">
//当按下鼠标时调用该事件
private function moveImage():void {
//停止播放Move效果
moveEffect.end();
//设置目标位置
moveEffect.xTo=mouseX;
moveEffect.yTo=mouseY;
//播放Move效果
moveEffect.play();
}
]]>
代码中将Application的layout属性设置为absolute,当用户在应用程序中任何位置上单击鼠标时,调用moveImage方法,该方法中首先停止Move效果,然后根据鼠标单击的位置设置目标位置,最后播放效果。
通常Move效果应用于使用绝对定位的容器(如 Canvas)或使用“layout=absolute”的容器(如 Application或Panel)中。如果需要将其应用到自动布局的容器(如VBox或 Grid容器)中,虽然会移动目标对象,但下次容器更新其布局时,会将目标对象移回其原始位置。在这种情况下,可以将容器的autoLayout属性设置为false来禁止往回移动,但这会禁用容器中所有控件的布局。
8)Pause暂停效果
Pause效果可以实现在指定时间段内不执行任何操作的功能。如果将Pause效果添加为 Sequence效果的子项,可以创建2个其他效果之间的暂停。
9)Resize大小调整效果
Resize效果用来改变组件的大小。与Move效果相似,Resize效果可以指定初始大小(widthFrom、heightFrom)、目标大小(widthTo、heightTo)和变化量(widthBy、heightBy),其使用规则也与Move效果的初始位置、目标位置和移动量的使用规则相似。下面的代码演示了Resize效果的使用方法:
另外hideChildrenTargets属性用来隐藏Panel容器的其他子项,当我们对Panel容器中的子项应用Resize效果时,默认情况下Panel会反复计算子项的大小和位置以调整布局,如果将这个属性设为true,可以让Panel容器在播放动画时不做这种计算,直到播放完成,这样可以节约系统资源。
10)Rotate旋转效果
Rotate是一种旋转效果,使组件围绕指定的点旋转。Rotate可以指定旋转中心的坐标(originX和originY属性)及旋转的起始角度(angleFrom属性)和最终角度(angleTo属性)。起始旋转角度的有效值范围是0~360,而最终角度则可以是正值也可以是负值,默认值为360。如果angleTo的值比angleFrom的值小,则目标沿逆时针方向旋转,否则以顺时针方向旋转。代码如下:
duration="2000"/>
另外有时需要设置hideFocusRing属性,以确定在开始播放效果时,效果是否应隐藏对焦环。该属性默认值为true。对于组件而言,对焦环已经被自动隐藏。如果Rotate效果应用于那些不是以UIComponent为基类目标对象,就必须隐藏对焦环。
需要注意的是, hideFocusRing属性在以Effect为基类的效果类中,默认值为false,而在以MaskEffect为基类效果类中,默认值为true。
11)SoundEffect声音效果
SoundEffect效果用来播放MP3音频文件。我们可以通过source属性指定要播放的MP3文件,可以直接设置该文件的URL,或是由Embed关键字嵌入MP3文件的Class对象。
SoundEffect效果的属性包括以下几个。
l autoLoad 属性用来设置是否自动加载MP3文件,默认值为true。
l bufferTime 属性用来设置声音对象的缓冲时间。默认值为 1000,单位为毫秒。
l isLoading如果已加载MP3,则该属性为true。
l loops 属性用来设置循环次数,默认值为0。
l panEasingFunction 属性用来设置声音均衡效果的缓动函数。
l panFrom属性和panTo属性用来设置声音对象的起始和最终平移,取值范围在-1.0~1.0之间,其中-1.0表示仅使用左声道,1.0 表示仅使用右声道,而0.0表示在2个声道间平均地均衡声音。
l sound 属性表示已加载MP3文件的声音对象。
l source 属性表示要播放的MP3文件的URL或类。
l startTime 属性用来设置开始播放时间(以毫秒为单位),默认值为0。
l useDuration 属性表示是否根据duration属性指定的时间停止播放,如果为false,则会在MP3完成播放或循环后停止效果,默认值为 true。
l volumeEasingFunction 属性用来设置音量效果的缓动函数。
l volumeFrom 属性和volumeTo属性用来设置声音对象的初始和最终音量,取值范围在0.0~1.0之间,默认值为1。
在下面的代码所示的例子中,当应用程序创建完成后开始播放声音文件,声音从左声道过渡到右声道。
代码清单 SoundSample.mxml
creationCompleteEffect="{mySound}">
duration="10000"
useDuration="false"
panFrom="-1" panTo="1"
source="@Embed(source='assets/bumperc.mp3')"/>
12)WipeUp、WipeRight、WipeDown、WipeLeft擦除效果
这些类定义了4个方向的擦除效果,通常与showEffect和hideEffect触发器配合使用,使用起来非常简便,如下面的例子。
代码清单 WipeSample.mxml
lected}">
hideEffect="{wipeUpOut}" showEffect="{wipeUpIn}"/>
lected}">
hideEffect="{wipeLeftOut}" showEffect="{wipeLeftIn}"/>
lected}">
hideEffect="{wipeDownOut}" showEffect="{wipeDownIn}"/>
lected}">
hideEffect="{wipeRightOut}" showEffect="{wipeRightIn}"/>
13)Zoom缩放效果
Zoom效果可以以指定点为中心按比例缩放对象。与Resize效果不同的是,Resize改变目标对象的长宽属性,而Zoom改变的目标对象的缩放比例。在下面的例子中,当鼠标移动到图片上时开始播放Zoom效果,鼠标移出时还原。
代码清单 ZoomSample.mxml
import flash.events.MouseEvent;
//鼠标事件处理函数
public function doZoom(event:MouseEvent):void {
//如果已经在播放效果了, 则反向播放效果
if (zoom.isPlaying) {
zoom.reverse();
}
//否则播放效果
else {
zoom.play([event.target],event.type==MouseEvent.ROLL_OUT?true:false);
}
}
]]>
zoomWidthTo="2"zoomHeightTo="2"zoomWidthFrom=".5"zoomHeightFrom=".5
"/>
paddingTop="5"paddingLeft="10"paddingRight="10"paddingBottom="5">
9.1.3 复合效果组件
很多时候需要同时执行或按顺序执行多个动画效果,此时可以用Parallel和Sequence效果。
1)Parallel平行播放效果
Parallel效果可以同时播放多个子效果,下面例子中的Parallel效果包含了Move和Resize效果,单击“Expend”按钮时图片将放大并发生位移,单击“Contract”按钮则返回原位置,并逐渐缩小为初始大小。
代码清单 ParallelSample.mxml
source="@Embed(source='assets/icon1.png')"/>
2)Sequence顺序播放效果
Sequence效果中可以顺序添加多个子效果,并以子效果的添加顺序依次播放。下面的代码演示了Sequence效果的使用方式:
在这个例子里,当用户在Canvas中按下鼠标时,会依次调用Sequence中的各个子效果,首先Image对象会右移一段距离,然后暂停2秒,再左移回到原来位置
[color=darkred][/color]
分享到:
相关推荐
Flex中的行为(Behavior)由两部分组成:触发器(Trigger)和效果(Effect)。触发器是指能够响应特定事件的动作,而效果则是指由触发器激活的一系列视觉或听觉的变化。这种机制使得开发者能够灵活地控制应用程序的...
总结一下,实现Flex中的图片旋转效果,我们需要: 1. 创建Flex项目并导入图片资源。 2. 使用`<mx:Image>`组件显示图片。 3. 添加鼠标事件监听器以响应用户的旋转操作。 4. 使用`Rotate`效果创建旋转动画。 5. 可选地...
自定义动画可以通过继承Flex的`Effect`类或使用`Tween`类来实现平滑过渡动画等方式来实现。 ### 总结 Flex虽然不像Flash那样专注于动画制作,但它提供了一系列强大的工具和API来帮助开发者轻松实现复杂的动画效果...
### Flex4.5常见问题总结 #### 一、Flex4.5组件开发模型与特性 Flex4.5采用了一种基于组件的开发模型,开发者可以通过继承现有组件并扩展其功能来构建自己的应用程序。这一模型的核心优势在于提高了代码的复用性,...
总结起来,这个资源包提供了一个学习Flex中Effect使用的实例,包括实际的代码示例和详细的博客解释。通过研究"wipe.mxml",用户能够了解如何在Flex项目中创建和控制各种视觉效果,这对于提升Flex应用的交互性和动态...
这种对象实际上是触发器(Trigger)和动画效果(Effect)的结合体。 ##### 1.1 什么是行为对象? - **定义**:行为对象可以视为触发器和动画效果的组合,通过定义特定的触发条件来启动预设的动画效果。 - **区别于...
这些效果可以通过Effect对象来创建,设置参数如`xFrom`, `xTo`, `angleFrom`, `angleTo`等,并通过`play()`方法来播放效果。还可以使用Sequence和Parallel类来组合效果,实现更复杂的动画序列。 **数学函数** 在...
总结来说,Flex电子相册2是一个充分利用Flex框架特性的应用,展示了如何利用ActionScript 3和Flex组件来创建一个高效、美观且功能丰富的电子相册系统。通过对图片的智能处理和精心设计的用户交互,确保了在不同场景...
Flex的行为由触发器(Trigger)和效果(Effect)组成。当用户进行特定操作,如点击按钮时,触发器被激活,进而启动预设的效果,如动画展示。触发器可由用户交互触发,也可由程序控制,并能关联多个效果。 1.1 ...
Flex特效主要由触发器(Trigger)和效果(Effect)组成,它们共同协作,实现了动态和响应式的用户界面。 ##### 2.2 触发器与效果 - **触发器**:是响应特定事件的动作,例如用户点击、鼠标悬停等。触发器负责监听...
- 如果使用了动画效果(如`Effect`),在不再需要时应调用相应的方法停止动画,并将`Effect`的`target`属性设置为`null`,以确保动画资源被正确释放。 4. **SWF文件** - 对于SWF文件,若要彻底释放,除了调用`...
总结,Flex特效代码是Flex开发中的一个重要组成部分,它使开发者能够为应用程序添加丰富的视觉效果和交互体验。通过熟练掌握Flex特效的使用,可以提升应用的整体质量和用户满意度。在Flash Builder 4中,开发者可以...
总结,实现“自动弹出窗口”在Flex中主要依赖`PopUpManager`类,通过设置坐标、触发条件和动画效果,可以创建出右下角或右上角弹出的窗口。这样的设计能有效地传递信息,同时保持用户界面的整洁和互动性。理解并熟练...
总结来说,DistortionEffects是一个为Flex3增加高级3D特效能力的扩展库,通过提供的API和示例,开发者可以轻松实现各种动态的3D变形效果。配合`.actionScriptProperties`、`.flexProperties`、`.project`和`....
### 在Flex中实现地图图层闪烁效果的知识点 #### 一、引言 在现代图形用户界面设计中,为了提高用户体验以及美观性,开发者经常会在应用程序中加入各种动态效果。在GIS(地理信息系统)领域中,为了让地图更具交互...
8. **避免过度使用效果**:过多使用Effect可能导致性能下降,尽可能减少其使用。 9. **资源的正确释放**:如SWF、Image对象、声音和视频等,使用后记得正确释放,如设置source为null,调用unload()方法等。 解决...
通常,我们会在`:hover`伪类下改变元素的`display`属性,使其从`none`变为`block`或`flex`等,以显示隐藏的内容。 ```css .hover-effect .hidden-content { display: none; } .hover-effect:hover .hidden-...
【标题】"20-button-with-ripple-effect"是一个项目,其目标是创建一个具有波纹效果的按钮。这种效果在用户点击按钮时可见,模仿水波纹扩散的视觉动画,为用户界面增添动态感和交互性。这个项目利用了多种现代Web...
总结来说,“css-paper-effect---float”主题涵盖了通过CSS实现纸张视觉效果的多个方面,包括颜色、纹理、边角、阴影等,同时利用浮动特性来布局这些纸片状元素,以达到美观且功能完善的页面设计。在实际项目中,...