重要的类自定义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. 修改MojoWeixin 只保留用户name 取消群昵称

    <pre name="code" class="python"> if($msg->type eq "friend_message& ...

  2. 【Android】: 部分注意事项

    1.用来触发BroadcastReceive的Intent和启动Activity或Service的Intent是不兼容的. 2.当文件名做为ContentProvider查询的一部分返回的时候,不应该 ...

  3. 解题报告 HDU1789 Doing Homework again

    Doing Homework again Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64 ...

  4. SICP 习题 (2.7) 解题总结 : 定义区间数据结构

    SICP 习题 2.7 開始属于扩展练习,能够考虑不做,对后面的学习没什么影响.只是,假设上面的使用过程表示序对,还有丘奇计数你都能够理解的话,完毕这些扩展练习事实上没什么问题. 习题2.7是要求我们 ...

  5. iOS UILabel 使用姿势大全(标红关键字)

    一.初始化 ? 1 2 3 UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(40, 40, 120, 44)];       ...

  6. C# lazy<T>的用法

    .NET 4.0中加入了lazy<T>(懒对象),其实叫懒对象感觉不对,更应该叫延迟对象加载. 正如我们所知,对象的加载是需要消耗时间的,特别是对于大对象来说消耗的时间更多.lazy可以实 ...

  7. java笔记之数据类型

    java中一句连续的字符不能分开在两行中书写,如国太长可用“+”将这两个字符串连起来 文档注释是以“/**”开头,并在注释内容末尾以“*/”结束. 文档注释是对代码的解释说明,可以使用javadoc命 ...

  8. BZOJ 2809: [Apio2012]dispatching( 平衡树 + 启发式合并 )

    枚举树上的每个结点做管理者, 贪心地取其子树中薪水较低的, 算出这个结点为管理者的满意度, 更新答案. 用平衡树+启发式合并, 时间复杂度为O(N log²N) ------------------- ...

  9. 20150706 js之定时器

    对应智能社:09 定时器的使用 开启定时器: setInterval(xxx(),1000);//间隔型 第一个参数为函数,第二个为时间,单位为毫秒 setTimeout(xxx(),1000);// ...

  10. Python3.5.1 下使用HTMLParser报错

    pip 安装HTMLParser之后,import HTMLParser 使用的时候,报错"ImportError:Can't not find module markupbase" ...