分类:
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:mx="library://ns.adobe.com/flex/halo" minWidth="1024" minHeight="768">