- 浏览: 122142 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
zhouhaiyang88:
huang-tao 写道你好,在吗?请问,我启动Tomcat时 ...
ActiveMq-JMS简单实例使用tomcat -
xurichusheng:
huang-tao 写道你好,在吗?请问,我启动Tomcat时 ...
ActiveMq-JMS简单实例使用tomcat -
wgcooo:
javax.naming.NameNotFoundExcept ...
ActiveMq-JMS简单实例使用tomcat -
huang-tao:
你好,在吗?请问,我启动Tomcat时报如下错,是什么原因?= ...
ActiveMq-JMS简单实例使用tomcat -
Eric.Yan:
好文章,明天试一试
ActiveMq-JMS简单实例使用tomcat
先看最终的演示:
滑块条的应用实在太广泛了:mp3播放器中声量的大小控制,视频播放时的画面亮度调节,阅读新闻时字体大小的实时调整,对象的大小互动控制...
分析:
1.任何一个滑块条控件的UI部分,基本上可以分为:背景滑块条 + 滑块按钮 二个部分
所以我分成了三部分: JimmySilderBar(背景条),JimmySilderButton(拖动钮),JimmySilder(真正的滑动控件,将前二个组合在一起),为了重用,这三个部分都做成MovieClip元件放在库里,这样以后要换风格或颜色时,只要在库里编辑元件,所有的地方自然全变了.
另外在JimmySilder这个元件中,为了能在代码中引用到另外二个元件的实例,JimmySilderButton实例被命名为_mcBtn,而JimmySilderBar实例被命名为_mcBar
2.拖动问题
MovieClip有startDrag/endDrag方法,而且startDarg方法还能方便的设置拖动的边界(即拖动时,滑块钮不能拖到背景条以外的地方),so...这个问题也解决了
3.属性/事件支持
既然是滑块控件,肯定要能得到当前的位置/值,另外拖动(以导致值变化)时,应该能触发使用者自己定义的处理方法(否则就变成一个单纯只能拖来拖去的东东,不能跟其它对象的属性关联交互,那就没啥意义了)
实现:
1.为了支持事件,首先也定义一个Event子类:
package
Jimmy.Event {
import
flash.events.Event;
public
class
ValueChangeEvent
extends
Event {
public
static
const
VALUE_CHANGE:
String
=
"VALUE_CHANGE"
;
private
var
_OldValue:
Number
,_NewValue:
Number
;
public
function
ValueChangeEvent(eventType:
String
,oldValue:
Number
,newValue:
Number
){
this
._OldValue = oldValue;
this
._NewValue = newValue;
super
(eventType);
}
public
function
get
OldValue():
Number
{
return
_OldValue;
}
public
function
get
NewValue():
Number
{
return
_NewValue;
}
}
}
2.控件代码的实现:
//滑块控件 beta 0.001 -- by 菩提树下的杨过 http://yjmyzz.cnblogs.com/
package
{
import
flash.display.Sprite;
import
flash.display.MovieClip;
import
flash.events.MouseEvent;
import
flash.ui.Mouse;
import
flash.events.Event;
import
flash.ui.MouseCursor;
import
flash.geom.Rectangle;
import
Jimmy.Event.ValueChangeEvent;
public
class
JimmySilder
extends
MovieClip {
private
var
_btnWidth:
uint
;
//滑块宽度
private
var
_btnHeight:
uint
;
//滑块高度
private
var
_barWidth:
uint
;
//滑块背景条宽度
private
var
_barHeight:
uint
;
//滑块背景条高度
private
var
_isDragging:
Boolean
=
false
;
//是否正在拖动
private
var
_value:
Number
=
0.0
;
//滑块的值(百分比)
public
function
JimmySilder(btnWidth:
uint
=
10
,btnHeight:
uint
=
30
,barWidth:
uint
=
200
,barHeight:
uint
=
10
,v:
Number
=
0.5
):
void
{
//trace("JimmySilder's constructor is called.");
this
._btnWidth=btnWidth;
this
._btnHeight=btnHeight;
this
._barWidth=barWidth;
this
._barHeight=barHeight;
init();
this
.Value=v;
this
.addEventListener(Event.ADDED_TO_STAGE,AddedToStage);
}
private
function
AddedToStage(e:Event):
void
{
this
.stage.addEventListener(MouseEvent.MOUSE_MOVE,stageMouseMoveHandler);
this
.stage.addEventListener(MouseEvent.MOUSE_UP,stageMouseUpHandler);
}
//属性Value的setter方法
public
function
set
Value(v:
Number
):
void
{
if
(v<=
0
) {
v=
0.0
;
}
if
(v>=
1
) {
v=
1.0
;
}
this
.value=v;
this
._mcBtn.x = _mcBar.width/(-
2
) + _mcBar.width * _value;
//根据value百分比值来定位mcBtn的横坐标
}
//属性Value的getter方法
public
function
get
Value():
Number
{
return
_value;
}
//初始化
private
function
init():
void
{
this
._mcBtn.width=_btnWidth;
this
._mcBtn.height=_btnHeight;
this
._mcBar.width=_barWidth;
this
._mcBar.height=_barHeight;
this
._mcBtn.addEventListener(MouseEvent.MOUSE_OVER, mcBtnMouseOverHandler);
this
._mcBtn.addEventListener(MouseEvent.MOUSE_OUT, mcBtnMouseOutHandler);
this
._mcBtn.addEventListener(MouseEvent.MOUSE_DOWN,mcBtnMouseDownHandler);
this
._mcBar.addEventListener(MouseEvent.MOUSE_DOWN,mcBarMouseDownHandler);
//trace("init 初始化完成");
}
//切换光标为手形
private
function
mcBtnMouseOverHandler(e:MouseEvent) {
Mouse.cursor=MouseCursor.HAND;
}
//切换光标为系统光标
private
function
mcBtnMouseOutHandler(e:MouseEvent) {
Mouse.cursor=MouseCursor.AUTO;
}
//开始拖动
private
function
mcBtnMouseDownHandler(e:MouseEvent) {
//trace("开始拖动");
_mcBtn.startDrag(
true
,
new
Rectangle(_mcBar.width/(-
2
),
0
,_mcBar.width,
0
));
//注意:这里锁定中心在指定区域拖动
_isDragging=
true
;
}
//停止拖动
private
function
stageMouseUpHandler(e:MouseEvent) {
//trace("停止拖动");
_mcBtn.stopDrag();
_isDragging=
false
;
}
//在自身区域上移动时,动态计算_value值
private
function
stageMouseMoveHandler(e:MouseEvent) {
if
(_isDragging) {
RaiseEvent();
//trace(_value);
}
}
//在背景条上点击时,滑块直接跳到该位置
private
function
mcBarMouseDownHandler(e:MouseEvent) {
_mcBtn.x=mouseX;
RaiseEvent();
}
//触发事件
private
function
RaiseEvent():
void
{
var
_oldValue:
Number
=_value;
_value = (_mcBtn.x + _mcBar.width/
2
)/_mcBar.width;
var
_valueChangeEvent:ValueChangeEvent=
new
ValueChangeEvent(ValueChangeEvent.VALUE_CHANGE,_oldValue,_value);
dispatchEvent(_valueChangeEvent);
//触发事件
}
}
}
3.测试代码:
import
Jimmy.Event.ValueChangeEvent;
var
silder:JimmySilder =
new
JimmySilder();
silder.width =
200
;
silder.height =
20
;
silder.x = stage.stageWidth/
2
;
silder.y =
200
;
//trace(silder.Value);
addChild(silder);
silder.addEventListener(ValueChangeEvent.VALUE_CHANGE, ValueChangeHandler);
testObj.scaleX = testObj.scaleY = silder.Value;
testObj2.rotation = silder.Value *
360
;
function
ValueChangeHandler(e:ValueChangeEvent){
//trace("当前滑块的值是:" + e.NewValue);
testObj.scaleX = testObj.scaleY = e.NewValue;
testObj2.rotation = silder.Value *
360
;
}
源文件下载: http://cid-2959920b8267aaca.skydrive.live.com/self.aspx/Flash/JimmySilder.rar
后记:可能有人会问,为啥不直接用系统内置的组件,要费这么大劲自己重造轮子? 如果您自己试下就会知道了,用了系统组件后,swf文件大约会在19k或22k,而按本文的办法,同样的swf,最终只有7K(精简了1/3左右),所以还是那句话,能自己手写的就自己手写,除非自己写不了,再用系统的组件。
发表评论
-
Flash/Flex学习笔记(50):矩阵变换
2011-04-24 13:52 1163先回顾一下Silvelright中的矩阵变换[转]WPF中的M ... -
Flash/Flex学习笔记(49):背面剔除与 3D 灯光
2011-04-24 13:50 974今天继续:上一回Flash/Flex学习笔记(50):3D线条 ... -
Flash/Flex学习笔记(48):迷你滚动条ScrollBar
2011-04-24 13:46 1063先看最终效果: 整个swf最终不到4k, ... -
Flash/Flex学习笔记(47):利用FMS快速创建一个文本聊天室
2011-04-24 13:45 995先来看客户端fla的构成: 第一帧:登录界面 第一帧的 ... -
Flash/Flex学习笔记(46):使用TweenLite
2011-04-24 13:43 1676TweenLite是第三方出品的专用于各种缓动动画的类库,其性 ... -
Flash/Flex学习笔记(45):3维旋转与透视变换(PerspectiveProjection)
2011-04-24 13:41 1211Flash/Flex学习笔记:3D基础 里已经介绍了3D透 ... -
Flash/Flex学习笔记(44):3D线条与填充
2011-04-24 13:39 10993D线条:把上一篇中的3D坐标旋转示例稍做修改,用线把各个 ... -
Flash/Flex学习笔记(43):3D基础
2011-04-24 13:34 1144之前我们所做的动画都 ... -
Flash/Flex学习笔记(42):反向运动学(下)
2011-04-24 13:30 917先要复习一下三角函数与余弦定理: 对于直角三角形,三边长 ... -
Flash/Flex学习笔记(41):反向运动学(上)
2011-04-24 13:29 940先回顾上篇所说的"正向运动学":以人行 ... -
Flash/Flex学习笔记(40):正向运动学
2011-04-24 13:27 883所谓"正向运动学"通俗点讲就是把几个连接部 ... -
Flash/Flex学习笔记(39):万有引力与粒子系统
2011-04-24 13:26 724万有引用公式: 其中G为万有引力常数 var numP ... -
Flash/Flex学习笔记(38):动量守恒与能量守恒
2011-04-24 13:24 942动能公式: 动量公式: 动量守恒: 能量守恒: ... -
Flash/Flex学习笔记(37):坐标旋转
2011-04-24 13:23 1020坐标旋转是个啥概念呢? 如上图,(蓝色)小球 绕某一 ... -
Flash/Flex学习笔记(36):碰撞检测
2011-04-24 13:22 606碰撞检测基本上可能分为二类:对象与对象的碰撞检测、对象与点 ... -
Flash/Flex学习笔记(35):弹性运动续--弹簧
2011-04-24 13:21 768上一篇里演示的弹性运动加上摩擦力因素后,物体最终基本上都会比较 ... -
Flash/Flex学习笔记(34):弹性运动
2011-04-24 13:20 773动画中的弹性运动 从视觉效果上接近 物理经典力学中的单摆运 ... -
Flash/Flex学习笔记(33):缓动动画
2011-04-24 13:18 998缓动 与 匀变速 看上去很类似,但其实有区别: 匀变速的 ... -
Flash/Flex学习笔记(32):不用系统组件(纯AS3)的视频播放器--只有8.82K
2011-04-24 13:17 1271以前为了赶项目,利用系统组件制作过一款视频播放器(见Fla ... -
Flash/Flex学习笔记(30):如何正确监听Stage对象的事件
2011-04-24 13:13 1295如果想在一个自定义类中注册对stage对象的监听事件,然后在另 ...
相关推荐
附件是关于 Flash/Flex 几个重要框架 Cairngorm、Mate、PureMVC以及Swiz 的典型例子,由 Tony Hillerson 提供 Homepage: http://insideria.com
flex/Flash开发系列书籍:基于FLASH的WEB3D应用研究
"Flash/Flex画曲线,绘图板"这个主题涉及的是如何使用这些技术来创建一个允许用户自由绘制曲线的图形界面。下面将详细介绍这个知识点。 1. **Flex基础**: - Flex是Adobe提供的开源框架,主要用于构建RIA(Rich ...
在IT行业中,Flash/Flex是一种广泛使用的开发工具,主要用于创建交互式、富媒体的Web应用程序。Flex是基于ActionScript和MXML的开放源代码框架,它允许开发者构建可自定义的用户界面,而Flash则是其背后的动画和...
在IT行业中,Flash和Flex是曾经非常流行的富互联网应用程序(RIA)开发框架,它们主要用于创建交互式的网页内容和应用程序。本文将重点讲解如何在Flash或Flex项目中利用CSS(层叠样式表)来定义文本样式,提升用户...
FDT 3.5 beta2 是FDT的一个重要更新版本,它引入了以下特性: 1. **提升性能**:对代码编辑、编译和调试等方面的性能进行了优化,提供了更流畅的开发体验。 2. **新功能集成**:可能包含了对Adobe AIR、Flash ...
它提供了一个强大且灵活的开发环境,允许开发者快速构建跨平台、跨浏览器的 Rich Internet 应用程序。在本节中,我们将介绍如何安装 FLEX 并将其集成到 Eclipse 中。 安装 FLEX 首先,需要下载 FLEX 的安装程序。...
这篇博客文章可能详细介绍了如何在Flex项目中构建一个登录界面,处理用户输入,验证身份,并与服务器进行交互。 在Flex中创建登录功能涉及以下几个关键知识点: 1. **MXML和ActionScript**:Flex应用通常由MXML和...
Flex Builder(现已被Adobe Flash Builder取代)是一个集成开发环境,提供了代码提示、调试和项目管理等功能,使得开发更加高效。 3. **Flex组件库**:Flex提供了丰富的预定义组件,如Button、Label、Canvas等,可...
本篇文章将深入探讨如何在Flex中实现这样一个功能丰富的滑块控件,并分享一个实际的范例。 首先,我们要了解Flex的基础。Flex是Adobe开发的一个开源框架,主要用于构建富互联网应用程序(RIA)。它基于ActionScript...
总结来说,这个RTMP直播例子展示了如何利用FLEX开发一个实时的流媒体播放器。通过学习和理解源代码,你可以深入了解RTMP协议的实现细节,以及FLEX如何与服务器和客户端进行交互。这对于想要从事音视频直播开发的人员...
在描述中提到了一个博文链接,iteye博客上的文章是学习FLEX的一个很好的资源。除此之外,Adobe官方文档、Flex Cookbook、Flex on the Beach等都是学习FLEX时不容忽视的资料库。社区论坛如Stack Overflow、Flex中文...
`<mx:Tree>`控件是Flex MX组件库中的一个关键组件,它允许开发者展示层次化的数据,用户可以展开、折叠节点,以及进行添加和删除操作。这个控件非常适合用来呈现目录结构、组织结构图等具有层级关系的数据。 1. **...
这份“Flex学习笔记”应该是一个全面的引导,帮助初学者理解Flex的基本概念和技术,通过实例来加深理解,从而快速进入Flex开发的世界。对于想要进一步提升技能的开发者来说,这将是一个很好的起点。
11. Flex拖拽库(http://code.google.com/p/flex-drag-n-drop-lib/):一个专门处理拖放操作的库,简化了Flex应用中的拖放功能实现。 12. BirdEye(http://code.google.com/p/birdeye/):大型项目,涵盖了数据可视...
自定义控件是Flex开发中的一个重要方面,它允许开发者根据特定需求创建独特的UI组件,从而增强应用的功能性和视觉效果。本文将深入探讨Flex自定义控件的创建过程,从前期准备到实际应用,帮助读者掌握这一关键技能。...
根据提供的信息,我们可以总结出以下关于Flex学习笔记中的关键技术知识点: ### 1. Flex 基础设置 在Flex开发中,通常会涉及到基础样式的设置。例如,在给定的部分内容中提到了字体大小、颜色及背景色的设置。虽然...
- **开始使用 Flex 4.5**:包括安装配置环境、创建第一个应用程序等基础操作。 - **迁移指南**:提供了从早期版本迁移到 Flex 4.5 的指导建议。 ##### 2. 开始开发 - **使用 MXML 开发应用**:讲解了 MXML 语法...
至于“Flex3权威指南学习笔记及相应代码”,这部分很可能是作者在阅读书籍并实践的过程中记录下的关键点和代码示例,可能包含了书中示例的实现,或者是作者自己根据书中的概念创建的实验项目。通过这些笔记和代码,...
- **基于`Canvas`的自定义控件**:此类控件通常作为一个空白画布,允许开发者自由地放置各种UI元素。例如,可以在其中添加按钮、文本框等组件。 - **基于`ComboBox`的自定义控件**:此类控件以下拉框的形式呈现,...