(二)半实半虚线:lineSegmentRenderer="renderer.MarcoLineRenderer1" ,差别在连接两个数据点之前做了逻辑判断
/**
* 画连接虚线
*
* @param pointLength 点个数
* @param x1 起点横坐标
* @param y1 起点纵坐标
* @param x2 终点横坐标
* @param y2 终点纵坐标
*
* */
private function drawDash(g:Graphics, pointLength:int, x1:Number, y1:Number, x2:Number, y2:Number):void
{
var p1:Point = new Point(x1, y1);
var p2:Point = new Point(x2, y2);
var max:Number = Point.distance(p1, p2);
var dis:Number = 0;
var p3:Point;
var p4:Point;
while(dis < max){
p3 = Point.interpolate(p2, p1, dis / max);
dis += pointLength;
if(dis > max){
dis = max;
}
p4 = Point.interpolate(p2, p1, dis / max);
g.moveTo(p3.x, p3.y);
g.lineTo(p4.x, p4.y);
dis += twoPointDistance;
}
}
}
(三)图例渲染器:legendMarkerRenderer="renderer.MarcoLegendMarkerRenderer",主要运用graphics来绘制线条和圆点
//图例渲染器
public class MarcoLegendMarkerRenderer extends ProgrammaticSkin implements IDataRenderer
{
public function MarcoLegendMarkerRenderer()
{
super();
}
private var legendData:Object;
public function get data():Object
{
return legendData;
}
public function set data(value:Object):void
{
legendData = value;
invalidateDisplayList();
}
//虚线条之间的间隔长度
private var twoPointDistance:int = 10;
//画图例
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
/*
//自己定制部分
var stroke:IStroke = getStyle("lineStroke");
var solidColor:uint = legendData.element.getStyle("fill");
graphics.clear();
stroke.apply(g, null, null);
graphics.beginFill(solidColor);
// drawDash(g, 4, 0, 0, 6, 0);
//画圆点前半截
graphics.moveTo(0, 0);
graphics.lineTo(6, 0);
//画圆点
graphics.drawCircle(9,0,3);
//画圆点后半截
graphics.moveTo(12, 0);
graphics.lineTo(18, 0);
//drawDash(g, 4, 12, 0, 18, 0);
graphics.endFill();
*/
super.updateDisplayList(unscaledWidth, unscaledHeight);
if (legendData && legendData.hasOwnProperty("element"))
{
var solidColor:uint = legendData.element.getStyle("fill");
graphics.clear();
graphics.beginFill(solidColor);
graphics.drawRect(-3, height/2 - 1.75, width + 6, 3.5);
graphics.endFill();
graphics.beginFill(solidColor);
graphics.lineStyle(1, 0xffffff);
graphics.drawCircle(width/2, height/2, 4);
graphics.endFill();
}
}