android绘制虚线

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

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

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

时间: 2024-10-21 22:41:57

android绘制虚线的相关文章

ichart.js绘制虚线、平均分虚线效果的实现代码_javascript技巧

ichart.js绘制虚线.平均分虚线效果的实现代码 var Data=new Array(); Data[0] = { labels : ["第一单元","第二单元","第三单元","第四单元","第五单元"], datasets : [ { name : '优秀率', color:'#1dbcfe', line_width:4, value : [80,75,92,62,0] } ] } Data[1]

Android自定义View实现绘制虚线的方法详解

前言 说实话当第一次看到这个需求的时候,第一反应就是Canvas只有drawLine方法,并没有drawDashLine方法啊!这咋整啊,难道要我自己做个遍历不断的drawLine?不到1秒,我就放弃这个想法了,因为太恶心了.方法肯定是有的,只不过我不知道而已. 绘制方法 最简单的方法是利用ShapeDrawable,比如说你想用虚线要隔开两个控件,就可以在这两个控件中加个View,然后给它个虚线背景. 嗯,理论上就是这样子的,实现上也很简单. <!-- drawable 文件 --> <

Photoshop绘制虚线的5种方法介绍

  下文给各位整理了7种直接快速在ps中绘制虚线的步骤,希望这些方法能让大家提高工作能力哦,有需要进入参考吧. 图案+填充制作虚线 先制作一个4X4的描边图片,如下图所示 选择编辑->定义图案,这样就设置一个自定的图案,然后新建一个文件,使用矩形选区工具随意画一个选框,选择编辑->填充->选择刚才我们自定义的图案,制作出下面的效果: 选取2px的高度,这个就是虚线了 使用路径文字 这种方法是通过路径走向文字来实现.分别以若干字符"-"和字符"."沿

在Photoshop中如何绘制虚线

  用Photoshop绘制虚线方法:先打开Brushes面板,双击用来画虚线的刷子,把spacing调到100%以上,便可画虚线了:用笔刷点一下起点,按住shift,再点一下末点,两点之间就画上虚线了. 分类: PS入门教程

Android绘制流程

一.前言 1.1.C++界面库 MFC.WTL.DuiLib.QT.Skia.OpenGL. Android里面的画图分为2D和3D两种: 2D是由Skia 来实现的,3D部分是由OpenGL实现的. 1.2.Android基本概念 窗口 对用户来说, 窗口就是手机屏幕, 包括下面的那些home.back按键.状态栏等.对于Activity来说, 窗口就是除系统状态栏和系统按键的屏幕区域, 有window之类的概念.对于wms来说, 它没有什么窗口的概念, 它能接受的只是一个个view而已.也就

绘制虚线的UIView

绘制虚线的UIView CAShapeLayer配合贝塞尔曲线可以绘制曲线,笔者继承了一个UIView的子类,并将该子类的backedLayer替换为CAShapeLayer,以此来实现绘制虚线的效果. 绘制出各种虚线的效果图: 实现的源码: LineDashView.h 与 LineDashView.m // // LineDashView.h // DASH // // 绘制虚线用的View // Copyright (c) 2014年 Y.X. All rights reserved. /

苹果iOS绘制虚线的例子

整理了一个方法,可以直接绘制虚线,下面直接上代码.参数说明已经给出,可直接copy使用 /**  ** lineView:       需要绘制成虚线的view  ** lineLength:     虚线的宽度  ** lineSpacing:    虚线的间距  ** lineColor:      虚线的颜色  **/ + (void)drawDashLine:(UIView *)lineView lineLength:(int)lineLength lineSpacing:(int)li

android绘制圆形图片的两种方式示例

android绘制圆形图片的两种方式 看下效果先 下面有完整的示例代码 使用BitmapShader(着色器) 我们在绘制view 的时候 就是小学上美术课 用水彩笔在本子上画画 使用着色器绘制圆形图片最简单的理解方式 就是把bitmap当做一种颜色 设置给paint ,paint都已经有颜色了 你想让它方了,圆了,扁了 还不是看你心情 canvas调用那个方法咯 实现的大致思路如下: 1. 创建一个类 继承imageView 重写onDraw() 2. 获取到bitmap图片 3. 计算图片的

Android 绘制太极图实例详解

Android 绘制太极图 绘制一个太极图实现代码: package com.jackie.taijicircle; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.util.AttributeSet;