Flex自定义MouseCursor

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

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值