有的时候我们需要一种虚线效果,比如图片的边框,愤怒的小鸟的飞翔路径,那么怎么绘制这些虚线呢?方法很多,目前我觉得好的有两种:
一、自己创建模式,一个点一个点的绘制。
二、用Android提供的 DashPathEffect 类来创建模式绘制。
下面我要演示的就是第二种方法,用Android提供给我的API来绘制。
由于是开发项目的一个小块,下面只能给出部分截图:
下面看一下核心绘图代码:
public void draw(Canvas mcanvas) {
GameLog.log(Tag, "draw");
Paint mLinePaint = newPaint();
mLinePaint.setColor(Color.WHITE);
mLinePaint.setStyle(Paint.Style.STROKE);
//绘制模式
PathEffect effect = new DashPathEffect(new float[] { 1,2, 4, 8}, 1);
mLinePaint.setAntiAlias(true);
mLinePaint.setPathEffect(effect);
mLinePaint.setStrokeWidth(4);
if (GameManager.getState()== GameManager.GameStart) {
GameLog.log(Tag,"GameStart");
float[]oldPts = getPts(mOldPoints);
mCanvas.drawLines(oldPts,mLinePaint);
prepareLinesData();
float[]newPts = getPts(mNewPoints);
mCanvas.drawLines(newPts,mLinePaint);
}
}
下面是关于这个DashPathEffect 的一些说明,摘录的:
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的改变会影响到形状的区域。这就能够保证应用到相同形状的填充效果将会绘制到新的边界中。