Paint  画笔 ,即用来绘制图形的"笔"

前面我们知道了Paint的一些基本用法:

  1. paint.setAntiAlias(true);//抗锯齿功能
  2. paint.setColor(Color.RED); //设置画笔颜色
  3. paint.setStyle(Style.FILL);//设置填充样式
  4. paint.setStrokeWidth();//设置画笔宽度 ,单位px
  5. paint.setShadowLayer(, , , Color.GREEN);//设置阴影

不过我们会发现,这样画出的线条都是笔笔直直的,能满足需求,但是美观上并不好看。

这就需要使用到Paint类 更多的一些方法了

首先,看下最简单设置的线条

  1. Paint paint = new Paint();
    paint.setStyle(Paint.Style.STROKE);
    paint.setColor(Color.RED);
    paint.setStrokeWidth(50);
  2.  
  3. Path path = new Path();
    path.moveTo(100,500);
    path.lineTo(200,200);
    path.lineTo(300,500);
    //绘制一个红色,线条宽度50px 的折线
    canvas.drawPath(path,paint);

一、线条路径样式 

  1. public void setPathEffect(PathEffect effect);

  设置路径样式;取值类型是所有派生自PathEffect的子类

 从第二个到最后一个 ,每一个都表示一个样式,其中用的最多的是 CornerPathEffect--圆形拐角效果  ,DashPathEffect——虚线效果 

 (1)、CornerPathEffect--圆形拐角效果

  new CornerPathEffect(float radius) // radius 表示弯曲的半径程度

  1. Path path = new Path();
  2. path.moveTo(,);
  3. path.lineTo(,);
  4. path.lineTo(,);
  5. //绘制一个红色,线条宽度50px 的折线
  6. paint.setPathEffect(new CornerPathEffect());
  7. canvas.drawPath(path,paint);

  

可以看到原来直线的折角 现在已经有一个弯曲程度了

拓展:我们可以根据这个方法来进行曲线图的实现

  (2)、DashPathEffect——虚线效果 

  1. public DashPathEffect(float intervals[], float phase)
  2. intervals[]:表示组成虚线的各个线段的长度;整条虚线就是由intervals[]中这些基本线段循环组成的。
    phase 开始绘制的偏移值

 注意: intervals[ ] 里面个数不限,但至少为2个。

     可以为单数个,也可以为双数个,如果为单数个,多出来的最后一个无效果

         双数个,表示一个实现长度,一个空线长度

     比如  new DashPathEffect(new float[]{30,10,20,10},10);

     那么每一段都分为4部分,先是30px的实线,再是10px的空心线,再是20px的实线,再是10px的空线

  1. Paint paint = new Paint();
  2. paint.setStyle(Paint.Style.STROKE);
  3. paint.setColor(Color.RED);
  4. paint.setStrokeWidth();
  5. Path path = new Path();
  6. path.moveTo(,);
  7. path.lineTo(,);
  8.  
  9. paint.setPathEffect(new DashPathEffect(new float[]{,,,},));
  10. canvas.drawPath(path,paint);

至于其他的效果,大家可以自己尝试 。

二、ComposePathEffect与SumPathEffect 叠加路径效果

从英文上可以看出这两个方法是用来合并路径效果的,但既然是两个方法,就有相应的区别

  (1)、ComposePathEffect

    这种合并路径效果是 先将paint 设置成第二个参数的路径效果,然后在此基础上 在设置成第一个参数对应的路径效果

    我们给一个线条,设置圆形拐角路径 和 一个虚线路径看一下

  1. Paint paint = new Paint();
  2. paint.setStyle(Paint.Style.STROKE);
  3. paint.setColor(Color.RED);
  4. paint.setStrokeWidth(3);
  5. Path path = new Path();
  6. path.moveTo(100,600);
  7. path.lineTo(200,200);
  8. path.lineTo(300,600);
  9. //虚线路径
  10. DashPathEffect dashPathEffect = new DashPathEffect(new float[]{30, 10, 20, 10}, 0);
  11. //圆角拐点路径
  12. CornerPathEffect cornerPathEffect = new CornerPathEffect(10);
  13. //合并后的路径
  14. ComposePathEffect composePathEffect = new ComposePathEffect(dashPathEffect, cornerPathEffect);
  15. //设置路径
  16. paint.setPathEffect(composePathEffect);
  17. canvas.drawPath(path,paint);

  (2)、SumPathEffect 

    这种合并路径效果是 分别将两个路径的效果叠加的显示出现

    我们给一个线条,设置圆形拐角路径 和 一个虚线路径看一下

  1. Paint paint = new Paint();
  2. paint.setStyle(Paint.Style.STROKE);
  3. paint.setColor(Color.RED);
  4. paint.setStrokeWidth();
  5. Path path = new Path();
  6. path.moveTo(,);
  7. path.lineTo(,);
  8. path.lineTo(,);
  9. //虚线路径
  10. DashPathEffect dashPathEffect = new DashPathEffect(new float[]{, , , }, );
  11. //圆角拐点路径
  12. CornerPathEffect cornerPathEffect = new CornerPathEffect();
  13. //合并后的路径
  14. SumPathEffect sumPathEffect = new SumPathEffect(dashPathEffect,cornerPathEffect);
  15. //设置路径
  16. paint.setPathEffect(sumPathEffect);
  17. canvas.drawPath(path,paint);

可以看出  一个虚线路径 和 一个 圆形拐角路径 叠加显示起来的效果

三、setStrokeCap(Paint.Cap cap)

  设置线帽样式,取值有Cap.ROUND(圆形线帽)、Cap.SQUARE(方形线帽)、Paint.Cap.BUTT(无线帽)

  线冒,可以理解为一条线两个端点,设置线冒样式使线条两端不看起来不那么死板

  这里绘制3条不同 样式的直线 来看一下效果

  

  1. Paint paint = new Paint();
  2. paint.setStyle(Paint.Style.STROKE);
  3. paint.setColor(Color.RED);
  4. paint.setStrokeWidth();
  5.  
  6. Path pathBUTT = new Path();
  7. pathBUTT.moveTo(,);
  8. pathBUTT.lineTo(,);
  9. paint.setStrokeCap(Paint.Cap.BUTT);
  10. canvas.drawPath(pathBUTT,paint);
  11.  
  12. Path pathSQUARE = new Path();
  13. pathSQUARE.moveTo(,);
  14. pathSQUARE.lineTo(,);
  15. paint.setStrokeCap(Paint.Cap.SQUARE);
  16. canvas.drawPath(pathSQUARE,paint);
  17.  
  18. Path pathROUND = new Path();
  19. pathROUND.moveTo(,);
  20. pathROUND.lineTo(,);
  21. paint.setStrokeCap(Paint.Cap.ROUND);
  22. canvas.drawPath(pathROUND,paint);

  

四、setStrokeJoin(Paint.Join join)

  设置结合处效果取值:

  1. 1Join.MITER(结合处为锐角)
  2. 2Join.Round(结合处为圆弧)
  3. 3Join.BEVEL(结合处为直线)

  举例:

  1. Paint paint = new Paint();
  2. paint.setColor(Color.RED);
  3. paint.setStrokeWidth();
  4. paint.setStyle(Paint.Style.STROKE);
  5. paint.setAntiAlias(true);
  6.  
  7. Path pathROUND = new Path();
  8. pathROUND.moveTo(,);
  9. pathROUND.lineTo(,);
  10. pathROUND.lineTo(,);
  11. paint.setStrokeJoin(Paint.Join.ROUND);
  12. canvas.drawPath(pathROUND,paint);
  13.  
  14. Path pathMITER = new Path();
  15. pathMITER.moveTo(,);
  16. pathMITER.lineTo(,);
  17. pathMITER.lineTo(,);
  18. paint.setColor(Color.GREEN);
  19. paint.setStrokeJoin(Paint.Join.MITER);
  20. canvas.drawPath(pathMITER,paint);
  21.  
  22. Path path = new Path();
  23. path.moveTo(,);
  24. path.lineTo(,);
  25. path.lineTo(,);
  26. paint.setColor(Color.BLUE);
  27. paint.setStrokeJoin(Paint.Join.BEVEL);
  28. canvas.drawPath(path,paint);

自定义控件详解(四):Paint 画笔路径效果的更多相关文章

  1. 《Android群英传》读书笔记 (2) 第三章 控件架构与自定义控件详解 + 第四章 ListView使用技巧 + 第五章 Scroll分析

    第三章 Android控件架构与自定义控件详解 1.Android控件架构下图是UI界面架构图,每个Activity都有一个Window对象,通常是由PhoneWindow类来实现的.PhoneWin ...

  2. WindowsPhone自定义控件详解(二) - 模板类库分析

    转自:http://blog.csdn.net/mr_raptor/article/details/7251948 WindowsPhone自定义控件详解(一) - 控件类库分析 上一节主要分析了控件 ...

  3. Spring配置文件详解 – applicationContext.xml文件路径

    Spring配置文件详解 – applicationContext.xml文件路径 Java编程                 spring的配置文件applicationContext.xml的默 ...

  4. .NET DLL 保护措施详解(四)各操作系统运行情况

    我准备了WEB应用程序及WinForm应用程序,分别在WIN SERVER 2012/2008/2003.Win7/10上实测,以下为实测结果截图: 2012 2008 2003 WIN7 WIN10 ...

  5. logback -- 配置详解 -- 四 -- <filter>

    附: logback.xml实例 logback -- 配置详解 -- 一 -- <configuration>及子节点 logback -- 配置详解 -- 二 -- <appen ...

  6. pika详解(四) channel 通道

    pika详解(四) channel 通道   本文链接:https://blog.csdn.net/comprel/article/details/94662394 版权 ​ channel通道 通道 ...

  7. View绘制详解(四),谝一谝layout过程

    上篇博客我们介绍了View的测量过程,这只是View显示过程的第一步,第二步就是layout了,这个我们一般译作布局,其实就是在View测量完成之后根据View的大小,将其一个一个摆放在ViewGro ...

  8. 自定义控件详解(二):Path类 相关用法

    Path:路径 绘制路径:void drawPath (Path path, Paint paint) Path 可以绘制的路径 一.直线路径 1.基本方法 void moveTo (float st ...

  9. C++11 并发指南六(atomic 类型详解四 C 风格原子操作介绍)

    前面三篇文章<C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)>.<C++11 并发指南六( <atomic> 类型详解二 std::at ...

随机推荐

  1. Shell - 简明Shell入门15 - 调试(Debug)

    示例脚本及注释 #!/bin/bash -x for filename in t1 t2 t3 do touch $filename.txt echo "Create new file: $ ...

  2. Liferay7 BPM门户开发之8: Activiti实用问题集合

    1.如何实现审核的上级获取(任务逐级审批) 这个是必备功能,通过Spring的注入+Activiti表达式可以很容易解决. 可参考: http://blog.csdn.net/sunxing007/a ...

  3. 列表list切片

    list1 = [1, 2, 3, 4, 5, 6] list1[::-1] >>>[6, 5, 4, 3, 2, 1] list1[:3:-1] >>>[6, 5 ...

  4. setting-mirrorO以及下载jar包流程简介

    mirrorOf常见的几种配置如下 1.* 2.repo3 3.repo1,repo2,*,!repo3 4.external:* 第二个例子只配置了一个repo3,这个镜像只能匹配id是repo3的 ...

  5. Python——使用代码平台进行识别验证码

    打码平台介绍 一般使用超级鹰或打码兔的打码平台. 超级鹰介绍 打开http://www.chaojiying.com/contact.html注册用户,生成软件ID 下载python的demo文件 查 ...

  6. Python函数学习——初步认识

    函数使用背景 假设老板让你写一个监控程序,24小时全年无休的监控你们公司网站服务器的系统状况, 当cpu\memory\disk等指标的使用量超过阀值时即发邮件报警, 你掏空了所有的知识量,写出了以下 ...

  7. JAVA中的COPYONWRITE容器

    Copy-On-Write简称COW,是一种用于程序设计中的优化策略.其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改, ...

  8. SSM整合(四)-整合后配置文件汇总

    1.新建Maven项目创建pom.xml pom.xml内容如下 <project xmlns="http://maven.apache.org/POM/4.0.0" xml ...

  9. window傻瓜式安装tensorflow

    最近学习一下,比较热门的深度学习. 本人英文差,记性差,什么都差,哈哈. 折腾过ub安装,虽然成功,但是总是觉得不好用. 发现tenorflow已经可以很傻瓜的在windows下安装了....... ...

  10. Linux_CentOS-服务器搭建 <四>

    既然tomcat,弄好了,数据库安装好了.我们考虑考虑下.今天带给大家是, 数据库的还原备份: 备份开始:      登录开始: mysql -u root -p  创建一个测试用的数据库test并创 ...