LineChart中如何用虚线表示

天弈isai 2010-07-09 09:35:36
LineChart中需要将某些特殊项目的线用虚线表示,那位大虾知道设定方法,请指教以下。
在网上查到的的都是要自己画。
...全文
633 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
天弈isai 2010-08-10
  • 打赏
  • 举报
回复
多谢楼上各位支持,下面是我自己找到的解决方法,共大家参考。


<mx:LineSeries id="ALine" yField="RCGA" xField="Time" visible="false">
<mx:lineSegmentRenderer>
<mx:Component>
<c:DashedLineRenderer/>
</mx:Component>
</mx:lineSegmentRenderer>
<mx:lineStroke>
<mx:Stroke color="#FF00FF" weight="2" alpha=".6"/>
</mx:lineStroke>
</mx:LineSeries>


package component
{
import mx.charts.renderers.LineRenderer;
import mx.graphics.IStroke;
import mx.charts.chartClasses.GraphicsUtilities;

public class DashedLineRenderer extends LineRenderer
{
private var _lineSegment:Object;
private var _pattern:Array = [10,15];

public function DashedLineRenderer() {
super();
}

[Inspectable(environment="none")]
override public function get data():Object
{
return _lineSegment;
}

override public function set data(value:Object):void
{
_lineSegment = value;
invalidateDisplayList();
}

override protected function updateDisplayList(unscaledWidth:Number,
unscaledHeight:Number):void
{
var stroke:IStroke = getStyle("lineStroke");
var form:String = getStyle("form");
var pattern:Array = getStyle("dashingPattern");
pattern = (pattern == null) ? _pattern : pattern;

graphics.clear();

DashedGraphicUtilities.drawDashedPolyLine(graphics, stroke, pattern, _lineSegment.items);
}
}
}


/*Copyright (c) 2006 Adobe Systems Incorporated

Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
*/
package component
{
import flash.display.Graphics;

import mx.graphics.IStroke;

public class DashedGraphicUtilities
{
public static function _drawDashedLine(target:Graphics,stroke:IStroke,pattern:Array,
drawingState:DashStruct,
x0:Number,y0:Number,x1:Number,y1:Number):void
{
var dX:Number = x1 - x0;
var dY:Number = y1 - y0;
var len:Number = Math.sqrt(dX*dX + dY*dY);
dX /= len;
dY /= len;
var tMax:Number = len;


var t:Number = -drawingState.offset;
var bDrawing:Boolean = drawingState.drawing;
var patternIndex:int = drawingState.patternIndex;
var styleInited:Boolean = drawingState.styleInited;
while(t < tMax)
{
t += pattern[patternIndex];
if(t < 0)
{
var x:int = 5;
}
if(t >= tMax)
{
drawingState.offset = pattern[patternIndex] - (t - tMax);
drawingState.patternIndex = patternIndex;
drawingState.drawing = bDrawing;
drawingState.styleInited = true;
t = tMax;
}

if(styleInited == false)
{
if(bDrawing)
stroke.apply(target);
else
target.lineStyle(0,0,0);
}
else
{
styleInited = false;
}

if (!isNaN(x0 + t*dX) && !isNaN(y0 + t*dY)) {
target.lineTo(x0 + t*dX,y0 + t*dY);
}

bDrawing = !bDrawing;
patternIndex = (patternIndex + 1) % pattern.length;
}
}


public static function drawDashedLine(target:Graphics,stroke:IStroke,pattern:Array,x0:Number,y0:Number,x1:Number,y1:Number):void
{
target.moveTo(x0,y0);
var struct:DashStruct = new DashStruct();
_drawDashedLine(target,stroke,pattern,struct,x0,y0,x1,y1);
}
public static function drawDashedPolyLine(target:Graphics,stroke:IStroke,pattern:Array,points:Array):void
{
if(points.length == 0)
return;

var prev:Object = points[0];

var struct:DashStruct = new DashStruct();
target.moveTo(prev.x,prev.y);
for(var i:int = 1;i<points.length;i++)
{
var current:Object = points[i];
_drawDashedLine(target,stroke,pattern,struct,prev.x,prev.y,current.x,current.y);
prev = current;
}
}
}
}

class DashStruct
{
public function init():void
{
drawing = true;
patternIndex = 0;
offset = 0;
}
public var drawing:Boolean = true;
public var patternIndex:int = 0;
public var offset:Number = 0;
public var styleInited:Boolean = false;
}



xiancaoidfsd 2010-08-03
  • 打赏
  • 举报
回复
http://jssanshengshi.javaeye.com/blog/710914
天弈isai 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xuhuanchao 的回复:]
引用 2 楼 tianyi_qingwu 的回复:

引用 1 楼 xuhuanchao 的回复:
看看
http://bbs.9ria.com/thread-40584-1-1.html

打不开这个网址啊。。。


可以打开啊,里面有示例
[/Quote]
权限不够,无法下载,也看不到
水中影子 2010-07-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 tianyi_qingwu 的回复:]

引用 1 楼 xuhuanchao 的回复:
看看
http://bbs.9ria.com/thread-40584-1-1.html

打不开这个网址啊。。。
[/Quote]

可以打开啊,里面有示例
leemiki 2010-07-10
  • 打赏
  • 举报
回复
虚线是要自己画,这个不难的!循环间隔画就可实现
水中影子 2010-07-09
  • 打赏
  • 举报
回复
天弈isai 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xuhuanchao 的回复:]
看看
http://bbs.9ria.com/thread-40584-1-1.html
[/Quote]
打不开这个网址啊。。。

4,328

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧