android绘制虚线

简介: 有的时候我们需要一种虚线效果,比如图片的边框,愤怒的小鸟的飞翔路径,那么怎么绘制这些虚线呢?方法很多,目前我觉得好的有两种: 一、自己创建模式,一个点一个点的绘制。 二、用Android提供的 DashPathEffect 类来创建模式绘制。 下面我要演示的就是第二种方法,用Android提供给我的API来绘制。 由于是开发项目的一个小块,下面只能给出部分截图: 效果如上

有的时候我们需要一种虚线效果,比如图片的边框,愤怒的小鸟的飞翔路径,那么怎么绘制这些虚线呢?方法很多,目前我觉得好的有两种:

一、自己创建模式,一个点一个点的绘制。

二、用Android提供的 DashPathEffect 类来创建模式绘制。

下面我要演示的就是第二种方法,用Android提供给我的API来绘制。

由于是开发项目的一个小块,下面只能给出部分截图:

android <wbr>绘制虚线效果
效果如上面。

下面看一下核心绘图代码:

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的改变会影响到形状的区域。这就能够保证应用到相同形状的填充效果将会绘制到新的边界中。

目录
相关文章
|
Android开发
Android绘制竖直虚线完美解决方案—自定义View
开发中我们经常会遇到绘制虚线的需求,一般我们使用一个drawable文件即可实现,下面我会先列举常规drawable文件的实现方式。
|
Android开发
Android进阶之绘制-自定义View完全掌握(一)
Android进阶之绘制-自定义View完全掌握(一)
114 0
Android进阶之绘制-自定义View完全掌握(一)
|
前端开发 Android开发
Android进阶之绘制-自定义View完全掌握(四)
Android进阶之绘制-自定义View完全掌握(四)
107 0
Android进阶之绘制-自定义View完全掌握(四)
|
编解码 Android开发
Android进阶之绘制-自定义View完全掌握(三)
Android进阶之绘制-自定义View完全掌握(三)
158 0
Android进阶之绘制-自定义View完全掌握(三)
|
XML Android开发 数据格式
Android进阶之绘制-自定义View完全掌握(二)
Android进阶之绘制-自定义View完全掌握(二)
101 0
Android进阶之绘制-自定义View完全掌握(二)
|
Android开发
Android自定义控件 | View绘制原理(画什么?)
从源码的角度分析“绘制(draw)”。View绘制只决定绘制的顺序,具体绘制内容由各个子View自己决定。
193 0
|
算法 Android开发
Android自定义控件 | View绘制原理(画在哪?)
从源码的角度分析“定位(layout)”。 位置都是相对的,比如“我在你的右边”、“你在广场的西边”。为了表明位置,总是需要一个参照物。。。
132 0
|
算法 Android开发
Android自定义控件 | View绘制原理(画多大?)
这一篇将以源码中的几个关键函数为线索分析“测量(measure)”。 如果想直接看结论可以移步到第三篇末尾。 真正的测量工作在onMeasure()中进行。。。
111 0
|
Linux Android开发 开发者
Android窗口管理分析(1):View如何绘制到屏幕上的主观理解
Android窗口管理分析(1):View如何绘制到屏幕上的主观理解
268 0
Android窗口管理分析(1):View如何绘制到屏幕上的主观理解
|
缓存 Android开发
Android RecyclerView 绘制流程及Recycler缓存(上)
RecyclerView 源码一万多行,想全部读懂学会挺麻烦的,感兴趣的可以自己去瞅瞅,这篇文章重点来看下 RecyclerView是如何一步步将每一个 ItemView 显示到屏幕上,然后再分析在显示和滑动过程中,是如何通过缓存复用来提升整体性能的。 RecyclerView本质上也是一个 自定义控件 ,因此我们可以沿着分析其 onMeasure -> onLayout -> onDraw 这 3 个方法的路线来深入研究。
238 0
Android RecyclerView 绘制流程及Recycler缓存(上)