Flex自定义MouseCursor

来源:互联网 发布:免费双色球缩水软件 编辑:程序博客网 时间:2024/06/06 18:25

1.FlashPlayer10.2以后自带的定义方式:

转自:http://www.freeliver.net/?p=167

一、关于MouseCursor

这个以前的做法貌似都是直接做的鼠标跟随,因为原来的flash.ui.Mouse这个类就只有两个方法:hide();show();你要注册本地的cursor是不可能的,不过flexsdk中有很简单的api来注册本地的cursor,也没有看源码,可能也是鼠标跟随吧。

现在来看这个10.2里面的新api接口,这里涉及的类有:

flash.ui.Mouse,flash.ui.MouseCursorData,flash.ui.MouseCurosr

以前觉得flash.ui是名不副实的,都没有真正能够操作ui的接口嘛,现在10.2有了改观。

可以通过Mouse.cursor= “cursor style name” 来指定一个cursor,在10.0.0到10.2应该都是支持的,可以定义基本的一些,这些cursor在MouseCursor常量中有定义:

public static const ARROW:String = "arrow"

public static const AUTO:String = “auto”

public static const BUTTON:String = “button”

public static const HAND:String = “hand”

public static const IBEAM:String = “ibeam”

然后你如果要定义本地支持的cursor,应该是:

1. 使用Mouse.supportsNativeCursor判断是否支持此api,这样就有比较好的兼容性了。

2.实例化一个MouseCursorData对象,此对象是cursor的源

此对象有两个属性:

MouseCursorData.data = Vector.<BitmapData>

Vector.<BitmapData>貌似也是10以后的新语法了,其实就是像java里面的集合,定义的集合只能接受BitmapData元素,所以还必须实例化或者得到一个BitmapData对象(无论是自己使用绘图api画一个,还是来自外部图片文件),其像素最大不能超过32x32pixels ,超过了就无效并且报出运行时错误,所以编译的时候根本没错。

3. 使用Mouse.registerCursor(‘cursor name’,MouseCursorData); 注册一个本地的cursor。

4. Mouse.cursor = “刚才指定的cursor name”

5. 切换的话,可以先注销刚才的cursor:Mouse.unregisterCursor(name:String);

到此自定义鼠标手势就ok了:

官方有一个例子是自己画的鼠标手势,

附一个来自外部图片的:

package{import flash.display.Sprite;import flash.events.Event;import flash.text.TextField;import flash.ui.*;import flash.display.Bitmap;import flash.display.BitmapData;import flash.display.Shape;public class Main extends Sprite{[Embed(source="./assets/2.jpg")]private var iconClass:Class;private var iconImg:Bitmap;public function Main():void{this.iconImg  = new iconClass() as Bitmap;if(stage){this.init();}else{this.addEventListener(Event.ADDED_TO_STAGE,init);}}protected function init(e:Event = null):void{var textfield:TextField = new TextField();textfield.text  = “”;textfield.x = this.stage.stageWidth/2;textfield.y = this.stage.stageHeight/2;this.addChild(textfield);if(Mouse.supportsNativeCursor){var mouseImage:Vector.<BitmapData>  = new Vector.<BitmapData>();mouseImage.push(this.iconImg.bitmapData);var bitmapData:BitmapData = new BitmapData(32,32,true,0);var shape:Shape = new Shape();shape.graphics.beginFill(0xFF0000,.85);shape.graphics.drawRect(0,0,32,32);shape.graphics.endFill();bitmapData.draw(shape);//mouseImage.push(bitmapData);var mouseCursorData:MouseCursorData = new MouseCursorData();mouseCursorData.frameRate = 1;mouseCursorData.data  = mouseImage;Mouse.registerCursor(‘testCursor’,mouseCursorData);Mouse.cursor  = ‘testCursor’;textfield.text  = ‘支持本地话的鼠标!’;}else{textfield.text  = ‘不支持本地化的鼠标!’;}}}}

2.通过跟随鼠标动画的方式来定义

转自:http://bbs.9ria.com/thread-69184-1-1.html

   

原创粉丝点击