flex4默认提供了很多效果,但是很多时候我们还是要自定义效果才能满足需求
要自定义flex4的效果需要用到两个类,Animate和AnimateInstance
自定义的效果要继承自AnimateInstance,这个类用来编写实际效果运行的代码,里面必须覆盖两个方法play()和animationUpdate(),play()方法用来初始化效果的参数,然后启动效果,animationUpdate()将在效果每次更新过程中调用,这个方法运行的就是实际执行效果的代码。
另一个类继承自Animate,这个类用来自定义效果,但是实际的效果是其内部由AnimateInstance实例来决定的。
下面用一个例子说明如何实现自定义效果
首先定义一个SlideAnimateInstance继承自AnimateInstance,这个类里有两个需要注意的地方,首先是target属性,这个属性表示当前运行效果的对象,另一个是motionPaths属性,这个集合用来存储MotionPath对象,每个MotionPath对象都定义了实际效果运行过程中改变的属性和对应的值。
import flash.display.DisplayObject;
import mx.events.FlexEvent;
import spark.effects.animation.Animation;
import spark.effects.animation.MotionPath;
import spark.effects.animation.SimpleMotionPath;
import spark.effects.supportClasses.AnimateInstance;
/**
* 自定义滑动效果
* @author wkkyo
*
*/
public class SlideAnimateInstance extends AnimateInstance
{
public var direction:String = "up";
public var offset:Number = 0;
public function SlideAnimateInstance(target:Object){
super(target);
}
/**
* 覆盖父类的play方法实现自定义效果
*
*/
override public function play():void{
//执行效果的组件
var t:DisplayObject = target as DisplayObject;
//效果的属性
var motionPath:SimpleMotionPath = new SimpleMotionPath();
var from:Number;
var to:Number;
switch( direction )
{
case "up":
motionPath.property = "y";
from = -t.height;
to = offset;
break;
case "right":
motionPath.property = "x";
from = t.parent.width;
to = t.parent.width-t.width-offset;
break;
case "down":
motionPath.property = "y";
from = t.parent.height;
to = t.parent.height-t.height-offset;
break;
case "left":
motionPath.property = "x";
from = -t.width;
to = offset;
break;
}
motionPaths = new Vector.<MotionPath>();
motionPaths.push(motionPath);
if (null != triggerEvent ){
if ( triggerEvent.type == FlexEvent.SHOW ){
motionPath.valueFrom = from;
motionPath.valueTo = to;
}else{
motionPath.valueFrom = to;
motionPath.valueTo = from;
}
}
super.play();
}
override public function animationUpdate(animation:Animation):void{
super.animationUpdate(animation);
var t:DisplayObject = target as DisplayObject;
if(direction == "up" || direction == "down"){
t.y = animation.currentValue["y"] as Number;
}else if(direction == "left" || direction == "right"){
t.x = animation.currentValue["x"] as Number;
}
}
}
接下来是SlideAnimate继承自Animate,在这个类的构造方法里需要将instanceClass赋值为自定义效果类的实例,即SlideAnimateInstance,同样要覆盖两个方法initInstance()和getAffectedProperties()
import mx.effects.IEffectInstance;
import spark.effects.Animate;
/**
* 滑动效果类
* @author wkkyo
*
*/
public class SlideAnimate extends Animate
{
/* 组件滑动的方向 “上右下左” */
[Inspectable(catalog="Common", type="String",enumeration="up,right,down,left", defaultValue = "up" )]
public var direction:String = "up";
/* 组件偏移量 */
public var offset:Number = 0;
public function SlideAnimate(target:Object=null)
{
super(target);
instanceClass = SlideAnimateInstance;
}
override protected function initInstance(instance:IEffectInstance):void
{
super.initInstance(instance);
var inst:SlideAnimateInstance = instance as SlideAnimateInstance;
inst.direction = this.direction;
inst.offset = this.offset;
}
override public function getAffectedProperties():Array
{
return ["x","y"];
}
}
接下来就可以在mxml中使用这个自定义的效果了
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" xmlns:effect="com.effect.*">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
<effect:SlideAnimate id="slideAnimate" direction="up" />
</fx:Declarations>
<s:Panel id="pan" title="从上滑出" width="200" height="300" showEffect="{slideAnimate}" hideEffect="{slideAnimate}" >
</s:Panel>
<s:Button label="效果" click="pan.visible=!pan.visible" right="10" />
</s:WindowedApplication>
其他效果都是类似的,重点就是在play方法中设置效果的参数,然后在
animationUpdate修改对应的属性。
分享到:
相关推荐
在Flex4中,自定义组件皮肤是提升应用视觉效果和用户体验的重要手段。下面将详细介绍如何在Flex4中自定义组件皮肤。 1. **组件皮肤的基本概念** - 组件皮肤是Flex中改变组件外观的一种方式,通过定义不同的皮肤,...
描述中提到的“对初学者有用,一个简单的flex自定义右键菜单”表明这个示例是为初学者设计的,它简化了自定义右键菜单的复杂性,让初学者可以快速上手。通常,自定义右键菜单需要处理鼠标事件,创建上下文菜单,并将...
深入学习Flex自定义控件和事件处理,不仅可以帮助你创建高度定制的应用,还能提高代码复用性和可维护性。通过实践和研究,开发者可以更好地掌握Flex的精髓,从而构建出更具吸引力和交互性的用户界面。
同时,它们也覆盖了高级主题,如自定义组件、动画效果、本地存储和网络通信,为进阶学习者提供了深入研究的可能。 四、Flex源代码 源代码示例是学习的最佳实践,通过阅读和分析现有的代码,你可以更好地理解Flex4的...
本文将深入探讨Flex自定义控件的创建过程,从前期准备到实际应用,帮助读者掌握这一关键技能。 #### 前期准备与创建自定义控件 在开始创建自定义控件之前,你需要确保已经安装了Adobe Flex SDK和相应的IDE,例如...
5. **_states_ 和 _transitions_**:Flex4中新增的状态管理机制,使得组件在不同状态间切换更加平滑,可以定义过渡效果(transitions)来实现动态视觉效果。 6. **Graphical Asset Creation**:包括位图、矢量图...
在本文中,我们将深入探讨如何在Flex环境中自定义加载条,即进度条组件。Flex是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。它提供了丰富的UI组件库,其中包括标准的进度条组件,但有时...
在Flex3中,有时候我们需要自定义加载进度条来满足特定的界面设计或用户体验需求。下面将详细讲解如何在Flex3中实现自定义的加载进度条。 1. **自定义组件基础** 在Flex3中,我们可以创建自定义组件来扩展或替换...
通过查看和学习这个示例代码,你可以深入理解如何在Flex中创建自定义的UI组件,特别是如何实现具有吸引力的视觉效果和交互功能的圆形进度条。这对于提升Flex编程技巧和用户体验设计能力非常有帮助。
Flex4学习资料是一份关于Adobe Flex 4技术的资源集合,主要关注源码解析和工具应用。Flex 4是Adobe Flash Platform的一部分,用于构建富互联网应用程序(RIA)。它基于ActionScript 3.0编程语言和Flex框架,提供了一...
"flex自定义文本编辑器"是一个这样的示例,它展示了如何利用Flex4框架构建一个具备特定功能的文本编辑工具,同时集成了自定义的拾色器功能。下面我们将详细探讨这个项目的相关知识点。 首先,我们关注的是`Text...
在“flex自定义加载进度条”的场景中,开发者可能想要替换Flex默认的Application预加载器,以提供更个性化的用户体验。自定义预加载器可以让开发者自由设计加载界面的外观和交互,例如改变颜色、形状或动画效果,...
8. **图形和动画**:利用Flex4,开发者可以创建复杂的图形和动画效果,如使用Graphics API绘制自定义形状,或通过Timeline控制组件状态改变的动画。 9. **事件模型**:理解Flex4的事件模型,如何触发和处理事件,是...
Flex4 是Adobe Flash Platform中的一个版本,主要用于构建富互联网应用程序(RIA)。在Flex4中,电视墙效果是一种视觉展示方式,常用于展示...学习并掌握这些知识点,对于构建动态、吸引人的Flex4应用程序至关重要。
在Flex4的学习过程中,你可能还会接触到Flex SDK、Flex Framework、SWF格式、数据绑定、状态管理、动画和效果、以及与后端服务(如AMF通信)的集成等内容。 总的来说,"Flex4 一学就会"是一本引导初学者全面掌握...
此外,Flex 4引入了新的图形渲染引擎——Gumbo,可以更高效地处理复杂的图形和动画效果。 "Flex_4[1].0_RIA开发详解讲义.ppt" 这个文件很可能是Flex4的培训教程或课程讲义,内容可能涵盖以下几个方面: 1. **基础...
Flex4是一种基于ActionScript 3.0的开源框架,用于构建富互联网应用程序(RIA)。它提供了强大的组件库,使得...通过深入研究这个demo,开发者可以学习到如何在Flex4环境中实现高效且用户体验良好的图片浏览功能。
通过这份Flex4开发实践PPT,开发者可以系统地学习Flex4的各个方面,从基础组件使用到高级特性的探索,逐步成为一名熟练的Flex4开发者。无论你是初学者还是有一定基础的开发者,都能从中受益匪浅,加深对Flex4技术的...
这个压缩包“Flex自定义生成图表源码.rar”显然包含了一组用于创建自定义图表的源代码,这对于开发者来说是宝贵的资源,特别是那些在Flex环境中工作并需要展示数据的可视化效果的人。 在Flex中,生成图表主要依赖于...
通过深入学习这份"Flex4中文帮助文档",开发者能够掌握Flex4和Flash Builder 4的核心概念和技术,从而提升在RIA领域的开发技能。同时,利用提供的CSS文件,可以了解Flex文档的呈现方式,为自定义文档样式或构建类似...