重要的类自定义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. BZOJ 1614: [Usaco2007 Jan]Telephone Lines架设电话线

    题目 1614: [Usaco2007 Jan]Telephone Lines架设电话线 Time Limit: 5 Sec  Memory Limit: 64 MB Description Farm ...

  2. MD5加密解密

    方法一 首先,先简单介绍一下MD5 MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer scien ...

  3. JDBC批量运行executeBatch

    JDBC运行SQL语句,有两个处理的接口,一个PreparedStatement,Statement,一般操作JDBC比較用得多的还是PreparedStatement 只是在运行批量,Prepare ...

  4. 利用KVC使用自定义的控件

    KVC简单使用: 可以用来设置属性的值例如有个Person类下有个属性name [self setvalue:@"yourname" forkey:@"name" ...

  5. c++, 虚基派生 : 共同基类产生的二义性的解决办法

    虚基派生 //虚继承 #include <iostream> using namespace std; #include <string> //---------------- ...

  6. PHP学习笔记1-常量,函数

    常量:使用const(php5)声明,只能被赋值一次,php5以下版本使用define: <?php const THE_VALUE = 100;//PHP5中才有const echo THE_ ...

  7. php 遍历文件夹及文件,获取文件名和文件路径存入数据库中

    <?php header("Content-Type:text/html; charset=gbk"); require('../../include/connect.php ...

  8. Android大放送干:书籍、过程、工具等各种全

    完全干燥分享,本文收集Android制定必要的书籍.过程.具.新闻和杂志各种资源.它们能让你在Android开发之旅的各个阶段都受益. 入门 <Learning Android(中文版)> ...

  9. Android:ViewPager04

    目录结构层次: 注意点: 1.MyAdapter.java一定要 extends PagerAdapter 2.MyAdapter要覆写以下几个方法: a.public int getCount(){ ...

  10. [转]php连接postgresql

    首先推荐一下postgres数据库,免费,强大,甚至某些方面比商业数据库还要好,大家可以试试. 安装: 附安装图解(网上找的):http://blog.sina.com.cn/s/blog_5edb7 ...