flex自定义的分区域状态显示控件——原创
运行结果如图:

源代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:Container xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" width="{ShowWidth}" height="{ShowHeight}"
creationComplete="init()">
<fx:Declarations>
<!-- 将非可视元素(例如服务、值对象)放在此处 -->
</fx:Declarations>
<fx:Style>
@namespace s "library://ns.adobe.com/flex/spark";
@namespace mx "library://ns.adobe.com/flex/mx";
.ToolTip{
font-size:12px;
fontWeight:bold;
}
</fx:Style>
<fx:Script>
<![CDATA[
/*
* MarkNumbers,_ShowWord,_DisplayPlace,_ShowType。为必须赋值字段。ShowWidth,ShowHeight可选择赋值
*此控件分段视觉化显示数据,
*1.可按"三段"和"四段"两种方式显示
*2.通过_ShowWord在每个颜色段上显示说明,
*3.通过_DisplayPlace设置标记显示的位置,范围为0-500;最好先计算好再输入显示;
*4.存在提示显示在数据的下层的问题;
*5.控件的大小是固定的;
*/
//-------------------------------------------------------------------------------------------
[Bindable]
public var ShowWidth:int = 500;//控件显示宽度,用户可以自定义
[Bindable]
public var ShowHeight:int = 20;//控件显示高度,用户可以自定义
public var MarkNumbers : Array;//控件各个点的数值。四个或者五个,四个分三段显示,5个分四段显示
//一下字段为自动计算
private var ShowMarkNumbers:Array = new Array();//控件各段显示的长度
private var StartShowMarkNumbers:Array = new Array();//控件各段显示的起始位置
private var ShowPlace:int;//标记在控件上显示的位置。计算为了像素
//-------------------------------------------------------------------------------------------
import mx.controls.Alert;
import mx.controls.ToolTip;
import mx.core.UIComponent;
import mx.printing.FlexPrintJob;
private var _sperite01:Sprite;
private var _sperite02:Sprite;
private var _sperite03:Sprite;
private var _sperite04:Sprite;
private var _sperite2:Sprite;
private var txtTemp1 : TextField;
private var txtTemp2 : TextField;
private var txtTemp3 : TextField;
private var txtTemp4 : TextField;
private var fmt : TextFormat;
private var tt:ToolTip = new ToolTip();
private var _ShowType:Boolean = true;//true 三段显示,false 四段显示
private var _DisplayPlace:Number;//标记显示值
private var _ShowWord:Array;//显示在不同颜色段上的文字
public function get ShowType():Boolean
{
return _ShowType;
}
public function set ShowType(value:Boolean):void
{
_ShowType = value;
}
public function get DisplayPlace():Number
{
return _DisplayPlace;
}
public function set DisplayPlace(value:Number):void
{
_DisplayPlace = value;
}
public function get ShowWord():Array
{
return _ShowWord;
}
public function set ShowWord(value:Array):void
{
_ShowWord = value;
}
private function init():void{
//-------------------------------对中间数据的处理
var i:int;
if(_ShowType)
i = 4;
else
i = 5;
var long:Number = MarkNumbers[i-1] - MarkNumbers[0];
for(var j:int = 1; j < i; j++)
{
ShowMarkNumbers[j-1] =int(((MarkNumbers[j] - MarkNumbers[j-1]) / long) * ShowWidth);
}
Alert.show( ShowMarkNumbers[0],"");
for(var n:int = 0; n < i-1; n++)
{
if(n == 0)
StartShowMarkNumbers[n] = 0;
else
StartShowMarkNumbers[n] = StartShowMarkNumbers[n-1] + ShowMarkNumbers[n-1];
}
_DisplayPlace = ShowWidth * ( _DisplayPlace / long);
//---------------------------------
_sperite01 = new Sprite();//建立影片精灵
_sperite02 = new Sprite();
_sperite03 = new Sprite();
_sperite04 = new Sprite();
_sperite2 = new Sprite();//建立影片精灵
txtTemp1 = new TextField();//建立输出文字区域
txtTemp2 = new TextField();
txtTemp3 = new TextField();
txtTemp4 = new TextField();
var uicomponent:UIComponent = new UIComponent();
uicomponent.addChild(_sperite01);
uicomponent.addChild(_sperite02);
uicomponent.addChild(_sperite03);
uicomponent.addChild(_sperite04);
uicomponent.addChild(_sperite2);
uicomponent.addChild(txtTemp1);
uicomponent.addChild(txtTemp2);
uicomponent.addChild(txtTemp3);
uicomponent.addChild(txtTemp4);
this.addChild(uicomponent);
doDraw();
}
private function doDraw():void{
tt.text=_DisplayPlace.toString();
tt.width = 80;
tt.height = 40;
tt.styleName = "ToolTip";
tt.visible = false;
//button1.addChild(tt);
//消瘦
_sperite01.graphics.beginFill(0xffffa0);
_sperite01.graphics.drawRect(StartShowMarkNumbers[0], 0, int(ShowMarkNumbers[0]), ShowHeight);
_sperite01.graphics.endFill();
txtTemp1.autoSize = "left";
txtTemp1.text = _ShowWord[0];
fmt = new TextFormat();
fmt.size = 14;
txtTemp1.setTextFormat(fmt);
txtTemp1.x = StartShowMarkNumbers[0] + (int(ShowMarkNumbers[0]) - txtTemp1.width) /2;
txtTemp1.y = _sperite01.y + (_sperite01.height - txtTemp1.height) / 2;
//正常范围
_sperite02.graphics.beginFill(0x98ff98);
_sperite02.graphics.drawRect(StartShowMarkNumbers[1], 0, ShowMarkNumbers[1], ShowHeight);
_sperite02.graphics.endFill();
txtTemp2.autoSize = "left";
txtTemp2.text = _ShowWord[1];
fmt = new TextFormat();
fmt.size = 14;
txtTemp2.setTextFormat(fmt);
txtTemp2.x = StartShowMarkNumbers[1] + (_sperite02.width - txtTemp2.width) /2;
txtTemp2.y = _sperite02.y + (_sperite02.height - txtTemp2.height) / 2;
//超重
_sperite03.graphics.beginFill(0xff8080);
_sperite03.graphics.drawRect(StartShowMarkNumbers[2], 0, ShowMarkNumbers[2], ShowHeight);
_sperite03.graphics.endFill();
txtTemp3.autoSize = "left";
txtTemp3.text = _ShowWord[2];
fmt = new TextFormat();
fmt.size = 14;
txtTemp3.setTextFormat(fmt);
txtTemp3.x = StartShowMarkNumbers[2] + (_sperite03.width - txtTemp3.width) /2;
txtTemp3.y = _sperite03.y + (_sperite03.height - txtTemp3.height) / 2;
if(!_ShowType){
//肥胖
_sperite04.graphics.beginFill(0xff2020);
_sperite04.graphics.drawRect(StartShowMarkNumbers[3], 0, ShowMarkNumbers[3], ShowHeight);
_sperite04.graphics.endFill();
txtTemp4.autoSize = "left";
txtTemp4.text = _ShowWord[3];
fmt = new TextFormat();
fmt.size = 14;
txtTemp4.setTextFormat(fmt);
txtTemp4.x = StartShowMarkNumbers[3] + (_sperite04.width - txtTemp4.width) /2;
txtTemp4.y = _sperite03.y + (_sperite04.height - txtTemp4.height) / 2;
}
//显示标记
_sperite2.graphics.beginFill(0x0000ff);
_sperite2.graphics.drawRect(_DisplayPlace, 0, 5, ShowHeight);
_sperite2.graphics.endFill();
_sperite2.addChild(tt);
_sperite2.addEventListener(MouseEvent.MOUSE_OVER,showTip);
_sperite2.addEventListener(MouseEvent.MOUSE_OUT,hideTip);
}
//显示提示区域
private function showTip(event:MouseEvent):void{
tt.visible = true;
tt.x = event.localX;
tt.y = event.localY;
//tt.styleName = "ToolTip";
this.graphics.beginFill(0x6699FF,1);
this.graphics.endFill();
}
//隐藏提示区域
private function hideTip(event:MouseEvent):void{
tt.visible = false;
}
private function doClean():void{
_sperite2.graphics.clear();
}
]]>
</fx:Script>
<mx:Button id="button1" click="doClean()"/>
</mx:Container>

浙公网安备 33010602011771号