Chinaunix首页 | 论坛 | 博客
  • 博客访问: 194854
  • 博文数量: 76
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 490
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-12 16:58
文章分类

全部博文(76)

文章存档

2011年(3)

2010年(52)

2009年(21)

我的朋友

分类:

2010-01-05 11:27:55

如何在flex中实现自定义鼠标样式呢?flex本身提供了一个CursorManager可以用来管理鼠标样式。

比如,我们想把鼠标设置为忙碌状态,首先导入CursorManager包。在你的as代码头部添加:

import mx.managers.CursorManager;

你也可能会用到一些设置鼠标样式优先级的常量:

import mx.managers.CursorManagerPriority;

CursorManager里的方法都是静态的,所以你不必实例化它即可直接调用。在你想设置鼠标为忙碌状态的地方添加如下代码:

CursorManager.setBusyCursor();

当执行完该句时,鼠标就会变成小闹钟的等待样式。

如果你想用自己的图片作为鼠标的样式,首先要嵌入图像的元数据,以便在程序中使用它:

[Embed(source = "cur1.png")]
var curStyle:Class;

然后可以像使用一般的类那样来使用curStyle,新建一个curStyle的实例:

var cursorStyle1:Class= new cur1() ;

将该样式实例设置到鼠标样式:

CursorManager.setCursor(cursorStyle1);

你也可以同时指定该样式的优先级和偏移:

CursorManager.setCursor(cursorStyle1, CursorManagerPriority.HIGH, 5, 5);

CursorManager 类控制一个光标优先顺序列表, 在其中具有最高优先级的光标当前是可见的。 如果光标列表包含具有相同优先级的多个光标, 则光标管理器会显示最近创建的光标。

这样,鼠标就会变成你想要的样子。

不过CursorManger并不好用,虽然他提供了一个currentCursorID属性,但是通过实验发现对该属性进行设置并不能改变鼠标的 样式,因为它没有改变鼠标样式的优先级属性,而一个鼠标样式是否显示取决于鼠标样式的优先级是否为最高。flex除了在设置鼠标样式,即 setCursor函数中可以指定优先级以外,没有提供其他接口来改变CursorManager中鼠标样式列表中样式的优先级。这样我们就不能随心所欲 的去指定我们的鼠标样式,我们需要通过添加和移除鼠标样式来达到我们的目的。

但这样不是很方便,代码看起来也别扭。通过跟踪CursorManager的源码,我们可以发现,CursorManger的基本原理也很简单,就 是把原来的鼠标隐藏掉了,然后自己加了一个Sprite对象cursorHolder,在该对象上绘图或者把图片加进去,然后在stage上监听 mousemove事件,把cursorHolder的位置设置到鼠标的位置,就实现了自定义鼠标样式。

那我们也可以自己写一个类来管理鼠标样式了。公司的源码,虽然是自己写的,还是不敢乱贴。类的代码就不发了,我就给个示例好了。根据这个原理,可以自己去实现。


               xmlns:s="library://ns.adobe.com/flex/spark"
               xmlns:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768">
   
       
   


   
       
   


   
       
   

   

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