Android · 2015年3月22日 0

android中画虚线–.PathEffect类简单认识

Java代码  收藏代码
  1. Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
  2. p.setStyle(Style.STROKE);
  3. p.setColor(Color.WHITE);
  4. p.setStrokeWidth(1);
  5. PathEffect effects = new DashPathEffect(new float[] { 1248}, 1);
  6. p.setPathEffect(effects);
  7. canvas.drawLine(040, mWidth, 40, p);

DashPathEffect是PathEffect类的一个子类,可以使paint画出类似虚线的样子,并且可以任意指定虚实的排列方式.

 

代码中的float数组,必须是偶数长度,且>=2,指定了多少长度的实线之后再画多少长度的空白.

如本代码中,绘制长度1的实线,再绘制长度2的空白,再绘制长度4的实线,再绘制长度8的空白,依次重复.1是偏移量,可以不用理会.

效果如下:

 

简单介绍下 PathEffect类:

PathEffect是用来控制绘制轮廓(线条)的方式。

PathEffect对于绘制Path基本图形特别有用,但是它们也可以应用到任何Paint中从而影响线条绘制的方式。

使用PathEffect,可以改变一个形状的边角的外观并且控制轮廓的外表。

Android包含了多个PathEffect,包括:

CornerPathEffect  可以使用圆角来代替尖锐的角从而对基本图形的形状尖锐的边角进行平滑。

DashPathEffect  可以使用DashPathEffect来创建一个虚线的轮廓(短横线/小圆点),而不是使用实线。你还可以指定任意的虚/实线段的重复模式。

DiscretePathEffect  与DashPathEffect相似,但是添加了随机性。当绘制它的时候,需要指定每一段的长度和与原始路径的偏离度。

PathDashPathEffect  这种效果可以定义一个新的形状(路径)并将其用作原始路径的轮廓标记。

下面的效果可以在一个Paint中组合使用多个Path Effect。

SumPathEffect  顺序地在一条路径中添加两种效果,这样每一种效果都可以应用到原始路径中,而且两种结果可以结合起来。

ComposePathEffect  将两种效果组合起来应用,先使用第一种效果,然后在这种效果的基础上应用第二种效果。

对象形状的PathEffect的改变会影响到形状的区域。这就能够保证应用到相同形状的填充效果将会绘制到新的边界中。

 

例如:只要修改相关属性相信就可以满足你的要求

public class DashedLineView extends View {

public DashedLineView(Context context, AttributeSet attrs,

int defStyleAttr, int defStyleRes) {

this(context, attrs, defStyleAttr);

}

public DashedLineView(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

public DashedLineView(Context context, AttributeSet attrs) {

super(context, attrs);

}

public DashedLineView(Context context) {

super(context);

}

@SuppressLint(“DrawAllocation”)

@Override

protected void onDraw(Canvas canvas) {

// TODO Auto-generated method stub

super.onDraw(canvas);

Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);

paint.setStyle(Paint.Style.STROKE);

paint.setColor(Color.BLACK);

paint.setStrokeWidth(0.5f);

Path path = new Path();

path.moveTo(0, 10);

path.lineTo(getWidth(), 10);

PathEffect effects = new DashPathEffect(new float[] { 5, 5, 5, 5 }, 1);

paint.setPathEffect(effects);

canvas.drawPath(path, paint);

}

}

 

Share this: