(一)全虚线:lineSegmentRenderer="renderer.MarcoLineRenderer"
/**
* 画连接虚线
*
* @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;
}
}
}
(二)半实半虚线:lineSegmentRenderer="renderer.MarcoLineRenderer1" ,差别在连接两个数据点之前做了逻辑判断
//画一半实线,一半虚线
public class MarcoLineRenderer1 extends LineRenderer
{
public function MarcoLineRenderer1()
{
super();
}
//虚线条之间的间隔长度
private var twoPointDistance:int = 10;
override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
{
var stroke:IStroke = getStyle("lineStroke");
var form:String = getStyle("form");
var items:Array = data.items;
var g:Graphics = graphics;
g.clear();
stroke.apply(g, null, null);
var i:int = 0;
var len:int = items.length;
for each( var item:LineSeriesItem in items )
{
var preItem:LineSeriesItem = items[i-1];
if( i > 0 )
{
//前n个点之间是实线
if(i<2)
// if(i<(new Date().getMonth()))
{
twoPointDistance = 1;
}
else{
twoPointDistance = 10;
}
drawDash(g, len, preItem.x, preItem.y, item.x, item.y);
}
i++;
}
}