Flex自身并不支持虚线,网上给出的解决方案大多是通过计算实线端点,然后分段连接的方法。这种方法最大的缺点是效率低下,当虚线样式过于复杂并且折线很长时,因为需要进行大量的计算和小线段的绘制,会造成明显的延迟。
因为项目需要,作者通过研究贴图方法和Matrix矩阵,给出一种在线宽较小时比较完美的解决方案,分享给大家,希望对您有所帮助。
基本思路是:首先通过虚线样式生成虚线配置单元(bitmapdata);然后将配置单元依次配置到折线上,配置过程中使用Matrix进行仿射变换。
下面是虚线绘制类,使用时只需给定折线点数组pts,虚线样式lengths和线宽,线色,透明度。
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.CapsStyle;
import flash.display.Graphics;
import flash.display.JointStyle;
import flash.display.Shape;
import flash.geom.Matrix;
import flash.geom.Point;
public class GraphicsUtil
{
/**绘制虚线
* g :绘制对象
* pts :折线点数组
* lengths :实线,虚线的长度数组。格式为实线长度,虚线长度,实线长度,虚线长度,...
* width :线宽
* color :线色
* alpha :透明度
* */
public static function drawDashedPolyline(g:Graphics,pts: