package com.zqgame.army.contrl
{
/**
* 自定义气泡提示
*@author zhoujie
*@date 2011-8-9
**/
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
import flash.text.TextFormat;
import flash.utils.Dictionary;
public class ToolTip extends Sprite
{
private var dic:Dictionary=new Dictionary();
private var label:TextField;
private var _backgound:Sprite;
public function ToolTip()
{
super();
initUI();
}
static private var _instance:ToolTip;
static public function getInstance():ToolTip
{
if(!_instance)
_instance=new ToolTip();
return _instance;
}
private function regesterModule(area:*):void
{
if(area is DisplayObjectContainer)
{
if(dic[area.name])return;
dic[area.name]=1;
area.addEventListener(MouseEvent.MOUSE_OVER,mouseMoveFunc);
area.addEventListener(MouseEvent.MOUSE_OUT,mouseMoveFunc);
}
else
{
var pa:DisplayObjectContainer= (area as DisplayObject).parent as DisplayObjectContainer;
if(dic[pa.name])return;
dic[pa.name]=2;
pa.addEventListener(MouseEvent.MOUSE_OVER,mouseMoveFunc);
pa.addEventListener(MouseEvent.MOUSE_OUT,mouseMoveFunc);
}
}
public function createToolTip(area:*,mess:String):void
{
dic[area.name+"mess"]=mess;
regesterModule(area);
}
private function mouseMoveFunc(evt:MouseEvent):void
{
switch(evt.type)
{
case MouseEvent.MOUSE_OUT :
hide(evt);
break;
case MouseEvent.MOUSE_OVER :
show(evt);
break;
}
}
private function hide(evt:MouseEvent):void
{
this.parent.removeChild(this);}
private function show(evt:MouseEvent):void
{
var cont:DisplayObjectContainer= evt.currentTarget as DisplayObjectContainer;
if(dic[cont.name]==2)
{
var dis:DisplayObject=evt.target as DisplayObject;
if(!dic[dis.name+"mess"])return;
label.htmlText=dic[dis.name+"mess"];
redraw(5,5);
(evt.currentTarget as DisplayObjectContainer).addChild(this);
this.x=dis.x+10;
this.y=dis.y-10;
}
else
{
var obj:DisplayObjectContainer= evt.currentTarget as DisplayObjectContainer;
if(!dic[obj.name+"mess"])return;
label.htmlText=dic[obj.name+"mess"];
redraw(20,20);
obj.parent.addChild(this);
this.x=obj.x+100;
this.y=obj.y;
}
}
private function redraw(w:Number,h:Number) :void{
w += label.width;
h += label.height;
this.graphics.clear();
this.graphics.beginFill(0x000000, 0.4);
this.graphics.beginFill(0xffffff);
this.graphics.drawRoundRect(0, 0, w, h, 5, 5);
this.graphics.endFill();
}
private function initUI():void
{
label = new TextField();
label.autoSize = TextFieldAutoSize.LEFT;
label.selectable = false;
label.multiline = false;
label.wordWrap = false;
label.defaultTextFormat = new TextFormat("宋体", 12, 0x666666);
label.text = "提示信息";
label.x = 5;
label.y = 2;
addChild(label);
mouseEnabled = mouseChildren = false;
}
public function closeToolTip(area:*):void
{
if(dic[area.name])
{
delete dic[area.name];
delete dic[area.name+"mess"];
}
area.removeEventListener(MouseEvent.MOUSE_OVER,mouseMoveFunc);
area.removeEventListener(MouseEvent.MOUSE_OUT,mouseMoveFunc);
}
}
}
花了一天的时间才写出来,在网上找了很多材料,但是发现都不能通用,而且调用起来,特别复杂,所以自己写了一个,只用一句代码就可以了。
createToolTip()直接调用该方法,然后传显示对象和提示文本,注意,该显示对象为任意对象,可以是button,也可以是mc等。