从LegendItem类中派生出LinkLegendItem类,并做两件事:
1. 设置鼠标为手型。
在构造函数中调用?
?? this.buttonMode = true;
??? this.mouseChildren = false;
即可
2. 设置鼠标经过时,改变背景色。步骤:
a.在createChildren时添加一个背景画布(放最底层)
b.捕捉鼠标的over 和out事件,在鼠标经过时设置背景色可见,鼠标移出时,隐藏。
3. 设置Legend 的 legendItemClass="LinkLegendItem" 。 若需要捕捉legendItem的单击事件,设置ItemClick事件即可。
全部代码如下。
//LinkLegendItem
package
{
import flash.events.MouseEvent;
import flash.ui.Mouse;
import mx.charts.LegendItem;
import mx.containers.Canvas;
public class LinkLegendItem extends LegendItem
{
?? private var bgElement:Canvas;
???? private var _highlight:Boolean;
?? public function LinkLegendItem()
?? {
??? super();
?? //这两行设置鼠标样式为手形
??? this.buttonMode = true;
??? this.mouseChildren = false;
??
??? addEventListener(MouseEvent.MOUSE_OVER,handleEvent);
???????? addEventListener(MouseEvent.MOUSE_OUT,handleEvent);
?? }
?
?? override protected function createChildren():void {
???????? super.createChildren();
????????
???????? bgElement = new Canvas();
???????? bgElement.setStyle("backgroundColor",0x00ff00);
???????? addChildAt(bgElement,0);
???? }
???
??? private function handleEvent(event:MouseEvent):void{
??????? if(event.type == MouseEvent.MOUSE_OVER)
??????????? highlight = true;
??????? else if(event.type == MouseEvent.MOUSE_OUT)
??????????? highlight = false;
??? }
???
???
??? public function set highlight(value:Boolean):void{
??????? _highlight = value;
??????? invalidateDisplayList()
??? }
???
???? protected override function updateDisplayList(unscaledWidth:Number,unscaledHeight:Number):void{
??????? super.updateDisplayList(unscaledWidth,unscaledHeight);
??????? graphics.clear();
??????? graphics.beginFill(0,0);
??????? graphics.drawRect(0,unscaledWidth,unscaledHeight);
??????? graphics.endFill();???????
???????? name = label; ???????? bgElement.setActualSize(unscaledWidth,unscaledHeight); ???????? if(_highlight) ??????????? bgElement.visible = true; ??????? else ??????????? bgElement.visible = false; ??????????? ?????????????? } ?????? } ? }