重要的类自定义View组件要重写View组件的onDraw(Canvase)方法,接下来是在该 Canvas上绘制大量的几何图形,点、直线、弧、圆、椭圆、文字、矩形、多边形、曲线、圆角矩形,等各种形状!
DrawView.java
[java]  view plain copy

 
  1. public class DrawView extends View {
  2. public DrawView(Context context) {
  3. super(context);
  4. }
  5. @Override
  6. protected void onDraw(Canvas canvas) {
  7. super.onDraw(canvas);
  8. /*
  9. * 方法 说明 drawRect 绘制矩形 drawCircle 绘制圆形 drawOval 绘制椭圆 drawPath 绘制任意多边形
  10. * drawLine 绘制直线 drawPoin 绘制点
  11. */
  12. // 创建画笔
  13. Paint p = new Paint();
  14. p.setColor(Color.RED);// 设置红色
  15. canvas.drawText("画圆:", 10, 20, p);// 画文本
  16. canvas.drawCircle(60, 20, 10, p);// 小圆
  17. p.setAntiAlias(true);// 设置画笔的锯齿效果。 true是去除,大家一看效果就明白了
  18. canvas.drawCircle(120, 20, 20, p);// 大圆
  19. canvas.drawText("画线及弧线:", 10, 60, p);
  20. p.setColor(Color.GREEN);// 设置绿色
  21. canvas.drawLine(60, 40, 100, 40, p);// 画线
  22. canvas.drawLine(110, 40, 190, 80, p);// 斜线
  23. //画笑脸弧线
  24. p.setStyle(Paint.Style.STROKE);//设置空心
  25. RectF oval1=new RectF(150,20,180,40);
  26. canvas.drawArc(oval1, 180, 180, false, p);//小弧形
  27. oval1.set(190, 20, 220, 40);
  28. canvas.drawArc(oval1, 180, 180, false, p);//小弧形
  29. oval1.set(160, 30, 210, 60);
  30. canvas.drawArc(oval1, 0, 180, false, p);//小弧形
  31. canvas.drawText("画矩形:", 10, 80, p);
  32. p.setColor(Color.GRAY);// 设置灰色
  33. p.setStyle(Paint.Style.FILL);//设置填满
  34. canvas.drawRect(60, 60, 80, 80, p);// 正方形
  35. canvas.drawRect(60, 90, 160, 100, p);// 长方形
  36. canvas.drawText("画扇形和椭圆:", 10, 120, p);
  37. /* 设置渐变色 这个正方形的颜色是改变的 */
  38. Shader mShader = new LinearGradient(0, 0, 100, 100,
  39. new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW,
  40. Color.LTGRAY }, null, Shader.TileMode.REPEAT); // 一个材质,打造出一个线性梯度沿著一条线。
  41. p.setShader(mShader);
  42. // p.setColor(Color.BLUE);
  43. RectF oval2 = new RectF(60, 100, 200, 240);// 设置个新的长方形,扫描测量
  44. canvas.drawArc(oval2, 200, 130, true, p);
  45. // 画弧,第一个参数是RectF:该类是第二个参数是角度的开始,第三个参数是多少度,第四个参数是真的时候画扇形,是假的时候画弧线
  46. //画椭圆,把oval改一下
  47. oval2.set(210,100,250,130);
  48. canvas.drawOval(oval2, p);
  49. canvas.drawText("画三角形:", 10, 200, p);
  50. // 绘制这个三角形,你可以绘制任意多边形
  51. Path path = new Path();
  52. path.moveTo(80, 200);// 此点为多边形的起点
  53. path.lineTo(120, 250);
  54. path.lineTo(80, 250);
  55. path.close(); // 使这些点构成封闭的多边形
  56. canvas.drawPath(path, p);
  57. // 你可以绘制很多任意多边形,比如下面画六连形
  58. p.reset();//重置
  59. p.setColor(Color.LTGRAY);
  60. p.setStyle(Paint.Style.STROKE);//设置空心
  61. Path path1=new Path();
  62. path1.moveTo(180, 200);
  63. path1.lineTo(200, 200);
  64. path1.lineTo(210, 210);
  65. path1.lineTo(200, 220);
  66. path1.lineTo(180, 220);
  67. path1.lineTo(170, 210);
  68. path1.close();//封闭
  69. canvas.drawPath(path1, p);
  70. /*
  71. * Path类封装复合(多轮廓几何图形的路径
  72. * 由直线段*、二次曲线,和三次方曲线,也可画以油画。drawPath(路径、油漆),要么已填充的或抚摸
  73. * (基于油漆的风格),或者可以用于剪断或画画的文本在路径。
  74. */
  75. //画圆角矩形
  76. p.setStyle(Paint.Style.FILL);//充满
  77. p.setColor(Color.LTGRAY);
  78. p.setAntiAlias(true);// 设置画笔的锯齿效果
  79. canvas.drawText("画圆角矩形:", 10, 260, p);
  80. RectF oval3 = new RectF(80, 260, 200, 300);// 设置个新的长方形
  81. canvas.drawRoundRect(oval3, 20, 15, p);//第二个参数是x半径,第三个参数是y半径
  82. //画贝塞尔曲线
  83. canvas.drawText("画贝塞尔曲线:", 10, 310, p);
  84. p.reset();
  85. p.setStyle(Paint.Style.STROKE);
  86. p.setColor(Color.GREEN);
  87. Path path2=new Path();
  88. path2.moveTo(100, 320);//设置Path的起点
  89. path2.quadTo(150, 310, 170, 400); //设置贝塞尔曲线的控制点坐标和终点坐标
  90. canvas.drawPath(path2, p);//画出贝塞尔曲线
  91. //画点
  92. p.setStyle(Paint.Style.FILL);
  93. canvas.drawText("画点:", 10, 390, p);
  94. canvas.drawPoint(60, 390, p);//画一个点
  95. canvas.drawPoints(new float[]{60,400,65,400,70,400}, p);//画多个点
  96. //画图片,就是贴图
  97. Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);
  98. canvas.drawBitmap(bitmap, 250,360, p);
  99. }
  100. }

Canvas上绘制几何图形的更多相关文章

  1. 软件项目技术点(7)——在canvas上绘制自定义图形

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 图形种类 目前我们软件可以绘制出来的形状有如下这几种,作为开发者我们一直想支持用户可以拖拽的类似word里面图形库,但目前还没有找到比 ...

  2. 在<canvas>上绘制img(drawImage())时需要注意的事

    <canvas>标签相当于是一个画布,css决定画布的样式(这块画布的背景颜色.大小等),脚本(一般使用JavaScript)就是画笔,我们可以在这个画布上绘制线条.形状.文字.图片等. ...

  3. Android 如何将Canvas上绘制的内容保存成本地图片(转)

    效果如下图所示 保存在sd卡上的文件为 手机上显示效果为: 1>>在Manifest文件中增加相应权限 <!-- 在SDCard中创建与删除文件权限 --> <uses- ...

  4. 前端使用html2canvas截图,在canvas上绘制图片及保存图片

    1.使用html2canvas 存在的问题: 不同的机型绘制位置不同的问题. 这个主要因为Html动态设置了html的dpr.(dpr可以解决屏幕显示不了1pxborder和无法显示小于12px的文字 ...

  5. 软件项目技术点(5)——在canvas上绘制动态网格线

    AxeSlide软件项目梳理   canvas绘图系列知识点整理 grid类的实现 当鼠标在画布上缩放时,网格能跟着我的鼠标滚动而相应的有放大缩小的效果. 下面是具体实现的代码,draw函数里计算出大 ...

  6. HTML5实现绘制几何图形

    HTML5新增了一个<canvas.../>属性.该元素自身并不绘制图形,只是相当于一张空画布.如果开发者需要向<canvas.../>上绘制图形则必须使用JavaScript ...

  7. Android中使用SurfaceView和Canvas来绘制动画

    事实上每一个View中都有Canvas能够用来绘制动画.仅仅须要在这个View中重载onDraw()方法就能够,可是SurfaceView类是一个专门用来制动动画的类. Canvas(中文叫做&quo ...

  8. -_-#【Canvas】导出在<canvas>元素上绘制的图像

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  9. HTML5<canvas>标签:使用canvas元素在网页上绘制线条和圆(1)

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...

随机推荐

  1. 让我们共同构筑物联网起飞的平台:物联网操作系统Hello China寻求应用合作伙伴

    经过几天的努力,终于把Hello China V1.76版的内核移植到基于Cortex-M3内核的STM32 chipset上.因为还希望进一步写一个USART驱动程序,因此详细的移植文档,预计一周之 ...

  2. codeblocks快捷键及设置

    ==日常编辑== • 按住Ctrl滚滚轮,代码的字体会随你心意变大变小.• 在编辑区按住右键可拖动代码,省去拉(尤其是横向)滚动条之麻烦:相关设置:Mouse Drag Scrolling.• Ctr ...

  3. 【Cocos2d-X开发学习笔记】第03期:渲染框架之导演类(CCDirector)的使用

    本系列学习教程使用的是cocos2d-x-2.1.4版本(截至目前为止最新稳定版) ,PC开发环境Windows7,C++开发环境VS2010 提到“导演”一词,想必读者最先联想到的是电影.作为娱乐产 ...

  4. 西门子PLC学习笔记二-(工作记录)

    今天师傅给讲了讲做自己主动化控制的总体的思路,特进行一下记录,做个备忘. 1.需求分析 本次的项目是对楼宇循环供水的控制,整个项目须要完毕压力.压差.温度等的获取及显示.同一时候完毕电机的控制. 2. ...

  5. C程序设计语言之一

    %d 按照十进制整形数打印: %o 按照八进制整形数打印: %x 按照十六进制整形数打印: %c 表示字符 %s 表示字符串 %% 表示%本身打印: %ld long型输出 ”幻数“: #define ...

  6. activity变成Dialog的步骤

    1.在布局文件上最外层最好使用RelativeLayout来布局,如果使用LinearLayout来布局的话,显示对话框的话,感觉会有点问题: 要在预览中看到框框,并且是match_parent的,而 ...

  7. GitHub的问题

    出现failed to publish the branch, 转自:http://blog.csdn.net/cucmakeit/article/details/29407329 (windows系 ...

  8. python写的屏保程序

    __author__ = 'ChenYan' from random import randint from tkinter import * class Randball(): def __init ...

  9. Verilog中的标点

    在Verilog中有时候会误用的上引号 1,define 中的 `define INITIAL  0 这个单引号用的是键盘左上角的那个单引号,其实就是一个小撇. 2,4'd0 这个 用的是才是叫真正的 ...

  10. Sereja and Bottles

    http://codeforces.com/problemset/problem/315/A 题目意思是第ai的瓶子能开bi的瓶子.给你相应的数据,求无法用其他瓶子打开的数量(即需要外力). 一开始看 ...