`
u0.ghoster
  • 浏览: 3509 次
  • 性别: Icon_minigender_1
  • 来自: 火星
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

FLEX特效的讲解

阅读更多
Flex的行为机制使得开发者可以很方便地为应用程序添加动画效果,从而使用户界面更加丰富多彩。本章将介绍如何在Flex应用程序中创建行为及动画效果。

9.1  什么是行为

Flex中的行为(Behavior)是由触发器(Trigger)和效果(Effect)组合而成。当用户在界面中进行某项操作时,如单击某个按钮,触发器会被激活,从而使目标组件发生某些视觉或听觉上的变化,例如播放一段逐渐显示的动画或发出声响等。触发器可以由用户操作触发,也可以由程序触发,一个触发器可以对应多个效果。

9.1.1  触发器与效果

触发器的使用非常简单,可以作为MXML标记中的一个属性,也可以在<mx:Style>标记中调用,或者在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分别表现了工厂类和实例类的层级关系。Effect类是一个抽象基类,是定义所有效果的基本工厂类。EffectInstance类是定义所有效果实例子类的基类。在应用程序中不会创建Effect类本身的实例,而是创建一个子类的实例,如Mask或Tween。

图9-1  工厂类与实例类

9.1.2  简单效果组件

Flex中提供了丰富的效果组件。由于效果是一种根据时间渐变的过程,因此所有效果都具有duration属性,用来设置播放时间(以毫秒为单位)。也可以通过设置repeatCount属性和repeatDelay属性,来分别控制效果播放的次数和重复播放效果的时间间隔(以毫秒为单位)。如果希望在触发器被触发后,延迟一段时间调用效果,可以使用startDelay属性。

1)AnimateProperty动画效果

AnimateProperty是用来为组件的属性或样式设置动画的效果。我们可以通过其property属性设定目标对象上需要设置动画效果的属性,然后设置fromValue属性和toValue属性,为效果提供属性的起始值和结束值。例如下面的代码使用mouseDownEffect触发器,当单击图片时,触发AnimateProperty效果,在1秒钟内,Image对象的scaleX属性由1变为2,被横向拉伸。代码如下:

<mx:AnimatePropertyid="animateProperty"property="scaleX"fromValue="1

" toValue="2"

duration="1000" />

<mx:Imageid="img"source="assets/plane.png"mouseDownEffect="{animateP

roperty}"/>

如果希望通过样式设置效果,可以将isStyle属性设置为ture,然后通过 setStyle()方法设置目标对象的样式,从而达到设置效果的目的。

2)Blur模糊效果

Blur 是一种模糊效果。该效果使用了flash.filters.BlurFilter滤镜,如果对某个组件应用了Blur 效果,就不能再对该组件应用BlurFilter滤镜,也无法再次应用Blur效果。下面的代码通过Image对象的mouseDownEffect触发器触发Blur效果,在1秒钟内,Image对象将逐渐变得模糊。代码如下:

<mx:Blur id="blurImage" duration="1000" blurXFrom="0.0" blurXTo="10.0"

blurYFrom="0.0" blurYTo="10.0"/>

<mx:Imageid="img"source="assets/plane.png"mouseDownEffect="{blurImage}"/>

3)Dissolve 溶解效果

Dissolve是一种溶解效果。当效果开始播放时,将创建一个不透明的矩形,这个矩形悬浮在目标组件的上方,它的颜色由 Dissolve.color属性设置,此时透明度为“1.0 - Dissolve.alphaFrom”。随着效果的播放,该矩形的alpha属性将从(1.0 - alphaFrom)逐渐变为“1.0 – alphaTo”,直到效果播放完成,矩形被销毁。

如果目标对象是一个容器,那么Dissolve效果将应用于容器内部的内容区域。

下面的代码使用一个CheckBox对象设置Image的visible属性,通过hideEffect和showEffect触发器分别触发各自的Dissolve效果:

<mx:Dissolveid="dissolveOut"duration="1000"alphaFrom="1.0"alphaTo="0

.0"/>

<mx:Dissolveid="dissolveIn"duration="1000"alphaFrom="0.0"alphaTo="1.

0"/>

<mx:CheckBox id="cbx" label="visible" selected="true"/>

<mx:Image source="assets/plane.png" visible="{cbx.selected}"

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效果:

<mx:Fade id="fadeOut" duration="1000" alphaFrom="1.0" alphaTo="0.0"/>

<mx:Fade id="fadeIn" duration="1000" alphaFrom="0.0" alphaTo="1.0"/>

<mx:CheckBox id="cbx" label="visible" selected="true"/>

<mx:Image source="assets/plane.png" visible="{cbx.selected}"

hideEffect="{fadeOut}" showEffect="{fadeIn}"/>

5)Glow 发光效果

Glow是一种发光效果,该效果使用了flash.filters.GlowFilter滤镜类。如果对某个组件应用了Glow效果,就不能对该组件应用GlowFilter滤镜,也无法再次应用Glow效果。下面的代码通过Image对象的mouseDownEffect触发器触发Glow效果:

<mx:Glow id="glowImage" duration="1000" alphaFrom="1.0" alphaTo="0.3"

blurXFrom="0.0"blurXTo="50.0"blurYFrom="0.0"blurYTo="50.0"color="0x

00FF00"/>

<mx:Image source="assets/plane.png" mouseDownEffect="{glowImage}"/>

6)Iris 虹效果

Iris效果通过扩展或收缩集中在目标上的矩形遮罩为效果目标设置动画。该效果可以从目标的中心放大遮罩来显示目标,也可以向中心收缩遮罩来隐藏目标。下面的代码使用一个CheckBox对象设置Image的visible属性,通过hideEffect和showEffect触发器分别触发各自的 Iris效果:

<mx:Iris id="irisOut" duration="1000" showTarget="true"/>

<mx:Iris id="irisIn" duration="1000" showTarget="false"/>

<mx:Imageid="flex" source="assets/plane.png" visible="{cbx.selected}"

showEffect="{irisIn}" hideEffect="{irisOut}"/>

<mx:CheckBox id="cbx" label="visible" selected="true"/>

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

<?xml version="1.0"?>

   <mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"paddingLeft=

   "0"

layout="absolute" mouseDown="moveImage();">

    <mx:Script>

        <![CDATA[

          //当按下鼠标时调用该事件

            private function moveImage():void {

               //停止播放Move效果

moveEffect.end();

//设置目标位置

moveEffect.xTo=mouseX;

moveEffect.yTo=mouseY;

//播放Move效果

moveEffect.play();

}

     ]]>

    </mx:Script>

<mx:Move id="moveEffect" target="{img}"/>

<mx:Image id="img" source="assets/plane.png"/>

</mx:Application>

代码中将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效果的使用方法:

<mx:Resize id="expand" target="{img}" widthTo="100" heightTo="160"/>

<mx:Resize id="contract" target="{img}" widthTo="25" heightTo="40"/>

<mx:ControlBar>

    <mx:Button label="Expand" click="expand.end(); expand.play();"/>

<mx:Buttonlabel="Contract"click="contract.end();contract.play();"/>

</mx:ControlBar>

<mx:Image id="img" width="25" height="40" source="assets/icon01.png"/>

另外hideChildrenTargets属性用来隐藏Panel容器的其他子项,当我们对Panel容器中的子项应用Resize效果时,默认情况下Panel会反复计算子项的大小和位置以调整布局,如果将这个属性设为true,可以让 Panel容器在播放动画时不做这种计算,直到播放完成,这样可以节约系统资源。

10)Rotate旋转效果

Rotate是一种旋转效果,使组件围绕指定的点旋转。Rotate可以指定旋转中心的坐标(originX和originY属性)及旋转的起始角度(angleFrom属性)和最终角度(angleTo属性)。起始旋转角度的有效值范围是0~360,而最终角度则可以是正值也可以是负值,默认值为 360。如果angleTo的值比angleFrom的值小,则目标沿逆时针方向旋转,否则以顺时针方向旋转。代码如下:

<mx:Rotate id="rotate" angleFrom="-45" angleTo="0" target="{img}"

duration="2000"/>

<mx:Image id="img" source="assets/plane.png" addedEffect="rotate"/>

另外有时需要设置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

<?xml version="1.0"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"

creationCompleteEffect="{mySound}">

<mx:SoundEffect id="mySound"

      duration="10000"

      useDuration="false"

      panFrom="-1" panTo="1"

      source="@Embed(source='assets/bumperc.mp3')"/>

</mx:Application>

12)WipeUp、 WipeRight、WipeDown、WipeLeft擦除效果

这些类定义了4个方向的擦除效果,通常与showEffect和hideEffect触发器配合使用,使用起来非常简便,如下面的例子。

代码清单 WipeSample.mxml

<?xml version="1.0"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<!--定义擦除效果-->

    <mx:WipeUp id="wipeUpOut" duration="1000"/>

    <mx:WipeUp id="wipeUpIn" duration="1000"/>

    <mx:WipeLeft id="wipeLeftOut" duration="1000"/>

    <mx:WipeLeft id="wipeLeftIn" duration="1000"/>

    <mx:WipeDown id="wipeDownOut" duration="1000"/>

    <mx:WipeDown id="wipeDownIn" duration="1000"/>

    <mx:WipeRight id="wipeRightOut" duration="1000"/>

    <mx:WipeRight id="wipeRightIn" duration="1000"/>

<mx:Panel title="Wipe Effects">    

      <mx:HBox width="100%">   

          <!--向上擦除-->

<mx:Imagesource="@Embed(source='assets/icon1.png')"visible="{cbx.se

lected}"

            hideEffect="{wipeUpOut}" showEffect="{wipeUpIn}"/>

<!--向左擦除-->

<mx:Imagesource="@Embed(source='assets/icon2.png')"visible="{cbx.se

lected}"

            hideEffect="{wipeLeftOut}" showEffect="{wipeLeftIn}"/>

          <!--向下擦除-->

<mx:Imagesource="@Embed(source='assets/icon3.png')"visible="{cbx.se

lected}"

            hideEffect="{wipeDownOut}" showEffect="{wipeDownIn}"/>

          <!--向右擦除-->

<mx:Imagesource="@Embed(source='assets/icon4.png')"visible="{cbx.se

lected}"

            hideEffect="{wipeRightOut}" showEffect="{wipeRightIn}"/>

      </mx:HBox>

      <mx:ControlBar>

          <mx:CheckBox id="cbx" label="visible" selected="true"/>

      </mx:ControlBar>

</mx:Panel>

</mx:Application>

运行该程序,效果如图9-2所示。

图9-2  擦除效果

13)Zoom缩放效果

Zoom效果可以以指定点为中心按比例缩放对象。与Resize效果不同的是,Resize改变目标对象的长宽属性,而Zoom改变的目标对象的缩放比例。在下面的例子中,当鼠标移动到图片上时开始播放Zoom效果,鼠标移出时还原。

代码清单 ZoomSample.mxml

<?xml version="1.0" encoding="utf-8"?>

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">

<mx:Script>
来源:http://shazhifeng.iteye.com/
分享到:
评论
1 楼 yuanwang_1989 2010-09-10  
很好,谢啦。。

相关推荐

    FLEX特效码详解一览

    ### FLEX特效码详解一览 在Flex开发过程中,特效效果是增强用户界面体验的重要手段之一。本文将对Flex中的一些特效编码进行详细解析,包括发光(Glow)、模糊(Blur)、序列(Sequence)以及缩放(Zoom)等特效的...

    flex+flash古画卷轴伸展唐诗特效

    下面将详细讲解Flex、Flash以及这个项目可能涉及的技术和知识点。 首先,Flex是一种基于ActionScript(AS)和MXML的开源框架,由Adobe公司开发,主要用于构建富互联网应用(RIA)。它提供了强大的组件库,可以快速...

    Flex 3 RIA开发详解与精深实践

    接着,书中的章节将详细讲解Flex 3的核心组件,如按钮、文本框、数据网格等,以及如何使用这些组件构建用户界面。此外,还会介绍如何利用Flex的数据绑定机制,实现数据与视图的自动同步,从而提高开发效率。对于状态...

    flex(eclipse)开发配置手册及教程

    1. 学习Flex特效和动画:使用Animate或Tween类实现丰富的视觉效果。 2. 探索Flex图形编程:利用Graphics API绘制自定义图形和图表。 3. 深入理解ActionScript面向对象编程,包括类、接口、包、事件机制等。 通过这...

    flex4权威指南配套源码

    9. **动画和效果**:Flex 4提供了强大的动画和特效支持,可以通过TimelineController和Effect类创建复杂的动态效果。 10. **自定义组件**:掌握如何创建自定义组件,扩展Flex的功能以满足特定项目需求。 通过逐个...

    Flex_API.rar_flex

    这个RAR压缩包文件名为"Flex_API.rar_flex",其中包含了对Flex API的详细讲解,特别是通过"Flex_API.pdf"这个PDF文档,我们可以深入理解Flex API的核心概念和应用。 Flex API是Adobe Flex框架的重要组成部分,它...

    从零开始系列-Flex3视频教程

    第六至第十四章则分别围绕文本、按钮、数据绑定、图表、交互设计、定位布局、导航、菜单设计以及行为和特效等方面,通过实例教学,使学员能熟练运用Flex创建各种用户界面元素。 第十五章"样式和主题"讨论了如何通过...

    FLEX企业应用开发实战PDF

    书中会讲述如何利用Flex的动画API创建过渡效果、淡入淡出等视觉特效。 7. **事件处理**:事件驱动是Flex应用程序的核心。书中会阐述事件模型,如何监听和处理事件,以及如何利用事件来实现组件间的通信。 8. **...

    Learning Flex 3: Getting up to Speed with Rich Internet Applications

    以及ActionScript语言的介绍、Flex中的数据绑定、如何通过E4X操作XML、一般数据显示控件的使用,再到Flex特有的特效运用、样式主题,以及程序的发布都有全面的讲解。 讲解内容和操作实例都比较清晰易懂,看完这本书...

    flex4权威指南 pdf+全代码

    4. **特效与动画**:Flex 4引入了全新的效果和动画系统,使开发者可以轻松地为应用程序添加平滑的过渡和视觉反馈。这部分内容会教授如何使用Effect和Animate类,以及如何利用TimelineControl和Tween类创建复杂的动画...

    flex制作的转圈效果

    本文将详细讲解如何使用Flex来创建一个动态的“转圈效果”。这个效果通常应用于轮播图、旋转菜单或者各种视觉焦点转移的交互设计中。 一、Flex布局基础 1. 弹性容器(Flex Container) 在Flex布局中,父元素被...

    arcgis for flex api

    通过深入研究这个离线文档,开发者不仅可以掌握ArcGIS for Flex API的基本使用,还能进一步了解如何结合Flex的组件和特效,创造出更具吸引力和实用性的GIS应用。无论你是GIS专业人士还是Flex开发者,这个API都能帮助...

    Flex中文帮助

    7. **动画与特效**:Flex支持创建各种动画效果,提升用户体验。这部分可能包含时间轴控制、缓动函数、过渡效果等内容。 8. **Flex项目部署**:讲解如何将完成的Flex应用发布到Web服务器,或者打包为桌面应用程序,...

    Flex完全自学手册(课件PPT)

    本套“Flex完全自学手册”旨在为初学者提供全面的学习资源,通过课件PPT的形式,深入浅出地讲解Flex的核心概念和技术。 1. **Flex简介**: Flex是一个开放源代码的开发工具集,主要用于创建在Web浏览器中运行的...

    FLex 中文帮助

    并且根据章节分布,例如“Flex中文帮助No1-2章.pdf”可能主要介绍基础概念和环境搭建,“Flex中文帮助No3章.pdf”可能是关于组件和数据绑定的深入讲解,而“Flex中文帮助No4章.pdf”可能涉及更高级的主题,如事件...

    flex4 权威指南 training from source

    它极大地扩展了Flex 3的功能,引入了全新的组件模型、皮肤和特效系统,使得开发者可以创建更具视觉冲击力和交互性的用户界面。 书中的核心知识点包括: 1. **MXML与ActionScript 3.0**:Flex 4支持MXML和...

    用jquery做的一个特效

    在开始讲解特效之前,我们首先需要了解jQuery的基本概念。jQuery是由John Resig于2006年创建的,它的核心功能包括DOM操作、事件处理、动画效果以及Ajax交互。jQuery的一个显著特点就是它提供了一套方便的链式调用...

    Flex.3.0.中文语言帮助手册chm版

    6. **动画和效果**: Flex 提供了丰富的动画和特效库,如Fade、Slide等。手册会教你如何创建和控制这些动画效果。 7. **事件处理**: 了解如何在Flex应用中处理各种用户交互事件,如点击、滚动等,是开发的关键。手册...

Global site tag (gtag.js) - Google Analytics