安卓突击:绘制图形和文本

drawPoint

drawLine

drawCircle

drawArc

drawText

创建一个类继承于View

首先创建一个Paint对象,给这个Paint对象设置线的颜色,大小等风格。然后在onDraw方法里,通过Canvas对象来调用划线函数,最后一个参数是paint对象。

invalidate()方法是:让屏幕刷新一次。即是将所有的图形都抹掉,重新画。

在画弧线的时候,可以设置是不是选择经过圆心。

在Activity的onCreate的方法里,setContentView()函数里的参数是new 一个视图的对象。

下面这个例子是,点击一次屏幕,重新绘制一遍屏幕上的线或者字。其中有一个是画扇形的时候不经过圆心,有一个是经过的。

  1. package cn.eoe.draw;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.graphics.Canvas;
  5. import android.graphics.Color;
  6. import android.graphics.Paint;
  7. import android.graphics.RectF;
  8. import android.graphics.Paint.Style;
  9. import android.os.Bundle;
  10. import android.view.MotionEvent;
  11. import android.view.View;
  12. public class Main extends Activity
  13. {
  14. class MyView extends View
  15. {
  16. private Paint paint1 = new Paint();
  17. private Paint paint2 = new Paint();
  18. private Paint paint3 = new Paint();
  19. private boolean useCenter = true;
  20. private float[] textSizeArray = new float[]
  21. { 15, 18, 21, 24, 27 };
  22. @Override
  23. public boolean onTouchEvent(MotionEvent event)
  24. {
  25. if (useCenter)
  26. {
  27. useCenter = false;
  28. paint1.setColor(Color.RED);
  29. paint2.setColor(Color.BLACK);
  30. paint3.setColor(Color.GREEN);
  31. paint1.setStrokeWidth(6);
  32. paint2.setStrokeWidth(4);
  33. paint3.setStrokeWidth(2);
  34. }
  35. else
  36. {
  37. useCenter = true;
  38. paint1.setColor(Color.BLACK);
  39. paint2.setColor(Color.RED);
  40. paint3.setColor(Color.BLUE);
  41. paint1.setStrokeWidth(2);
  42. paint2.setStrokeWidth(4);
  43. paint3.setStrokeWidth(6);
  44. }
  45. for (int i = 0; i < textSizeArray.length / 2; i++)
  46. {
  47. float textSize = textSizeArray[i];
  48. textSizeArray[i] = textSizeArray[textSizeArray.length - i - 1];
  49. textSizeArray[textSizeArray.length - i - 1] = textSize;
  50. }
  51. invalidate();
  52. return super.onTouchEvent(event);
  53. }
  54. public MyView(Context context)
  55. {
  56. super(context);
  57. setBackgroundColor(Color.WHITE);
  58. paint1.setColor(Color.BLACK);
  59. paint1.setStrokeWidth(2);
  60. paint2.setColor(Color.RED);
  61. paint2.setStrokeWidth(4);
  62. paint3.setColor(Color.BLUE);
  63. paint3.setStrokeWidth(6);
  64. }
  65. private void drawLinesExt(Canvas canvas, float[] pts, Paint paint)
  66. {
  67. float[] points = new float[pts.length * 2 - 4];
  68. for (int i = 0, j = 0; i < pts.length; i = i + 2)
  69. {
  70. points[j++] = pts[i];
  71. points[j++] = pts[i + 1];
  72. if (i > 1 && i < pts.length - 2)
  73. {
  74. points[j++] = pts[i];
  75. points[j++] = pts[i + 1];
  76. }
  77. }
  78. canvas.drawLines(points, paint);
  79. }
  80. @Override
  81. protected void onDraw(Canvas canvas)
  82. {
  83. canvas.drawPoint(60, 120, paint3);
  84. canvas.drawPoint(70, 130, paint3);
  85. canvas.drawPoints(new float[]
  86. { 70, 140, 75, 145, 75, 160 }, paint2);
  87. //canvas.drawPoints(new float[]
  88. // { 70, 140, 75, 145, 75, 160 }, 1,4,paint2);
  89. canvas.drawLine(10, 10, 300, 10, paint1);
  90. canvas.drawLine(10, 30, 300, 30, paint2);
  91. canvas.drawLine(10, 50, 300, 50, paint3);
  92. drawLinesExt(canvas, new float[]
  93. { 10, 70, 120, 70, 120, 170, 10, 170, 10, 70 }, paint2);
  94. drawLinesExt(canvas, new float[]
  95. { 25, 85, 105, 85, 105, 155, 25, 155, 25, 85 }, paint3);
  96. drawLinesExt(canvas, new float[]
  97. { 160, 70, 230, 150, 170, 155, 160, 70 }, paint2);
  98. paint2.setStyle(Style.STROKE);
  99. canvas.drawCircle(260, 110, 40, paint2);
  100. paint2.setStyle(Style.FILL);
  101. canvas.drawCircle(260, 110, 30, paint2);
  102. RectF rectF = new RectF();
  103. rectF.left = 30;
  104. rectF.top = 190;
  105. rectF.right = 120;
  106. rectF.bottom = 280;
  107. canvas.drawArc(rectF, 0, 200, useCenter, paint2);
  108. rectF.left = 140;
  109. rectF.top = 190;
  110. rectF.right = 280;
  111. rectF.bottom = 290;
  112. paint2.setStyle(Style.STROKE);
  113. canvas.drawArc(rectF, 0, 360, useCenter, paint2);
  114. rectF.left = 160;
  115. rectF.top = 190;
  116. rectF.right = 260;
  117. rectF.bottom = 290;
  118. paint3.setStyle(Style.STROKE);
  119. canvas.drawArc(rectF, 0, 360, useCenter, paint3);
  120. float y = 0;
  121. for (int i = 0; i < textSizeArray.length; i++)
  122. {
  123. paint1.setTextSize(textSizeArray[i]);
  124. paint1.setColor(Color.BLUE);
  125. canvas.drawText("Android(宽度:" + paint1.measureText("Android")
  126. + ")", 20, 315 + y, paint1);
  127. y += paint1.getTextSize() + 5;
  128. }
  129. paint1.setTextSize(22);
  130. }
  131. }
  132. @Override
  133. public void onCreate(Bundle savedInstanceState)
  134. {
  135. super.onCreate(savedInstanceState);
  136. setContentView(new MyView(this));
  137. }
  138. }

来自为知笔记(Wiz)

时间: 2024-12-22 12:28:46

安卓突击:绘制图形和文本的相关文章

【UWP通用应用开发】编辑文本、绘制图形、3D透视效果及绘制时钟实战

编辑文本及键盘输入 相信大家都会使用TextBox,但如果要让文本在TextBox中换行该怎么做呢?将TextWrapping属性设置为Wrap,将AcceptsReturn属性设置为True就好咯. PasswordBox很明显就是一个密码框了,和其他的控件相比其有2个特殊之处,一个是其可以用MaxLength来控制最大的长度,一个是用PasswordChanged来捕捉密码的改名.显然比如QQ密码的MaxLength就是16位了,而PasswordChanged可以用来监测比如用户设置的密码

Windows App开发之编辑文本与绘制图形

编辑文本及键盘输入 相信大家都会使用TextBox,但如果要让文本在TextBox中换行该怎么做呢?将TextWrapping属性设置为Wrap,将AcceptsReturn属性设置为True就好咯. PasswordBox很明显就是一个密码框了,和其他的控件相比其有2个特殊之处,一个是其可以用MaxLength来控制最大的长度,一个是用PasswordChanged来捕捉密码的改名.显然比如QQ密码的MaxLength就是16位了,而PasswordChanged可以用来监测比如用户设置的密码

微信小程序开发—(八)canvas绘制图形

一.小知识 (1).API接口 (2).context 对象的方法列表 二.步骤 wxml中: <canvas canvas-id="myCanvas" class="myCanvas" ></canvas> 在js文件onLoad: function() {}的方法中开始编写代码 1.创建一个 Canvas 绘图上下文 CanvasContext const ctx = wx.createCanvasContext('myCanvas')

SurfaceView绘制图形

一.什么是SurfaceView 官方文档: SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface.你可以控制这个Surface的格式和尺寸.Surfaceview控制这个Surface的绘制位置.        surface是纵深排序(Z-ordered)的,这表明它总在自己所在窗口的后面.surfaceview提供了一个可见区域,只有在这个可见区域内 的surface部分内容才可见,可见区域外的部分不可见.surface的排版显示受到视图层级关

canvas 绘制图形

什么是canvas? <canvas> 元素用于图形的绘制,通过脚本 (通常是JavaScript)来完成. <canvas> 标签只是图形容器,您必须使用脚本来绘制图形. 方法属性 颜色.样式和阴影 属性 描述 fillStyle 设置或返回用于填充绘画的颜色.渐变或模式. strokeStyle 设置或返回用于笔触的颜色.渐变或模式. shadowColor 设置或返回用于阴影的颜色. shadowBlur 设置或返回用于阴影的模糊级别. shadowOffsetX 设置或返回

利用canvas绘制图形

绘制图有很多种方法,可以借助flash实现,也可以使用SVG和VML来绘图.本章将要学习一种新的绘图方法--使用Canvas元素,它是基于HTML5原生的绘图功能.使用Canvas元素,可以绘制图形,也可以实现动画.它方便了使用Javascript脚本的前端开发人员,寥寥的竖行代码,就可以在Canvas元素中实现各种图形及动画.本章将介绍如何使用Canvas元素来绘制一些简单的图形.本章主要知识点如下:·认识Canvas元素·使用Canvas绘图·Canvas与JavaScript之间的互动·利

Eamcs Artist mode绘制图形

Artist mode绘制图形的最大优点是提供了一堆菜单,可以让你快速的用文本字符绘制出图形,图形虽然简陋,但是可以插入到代码注释之中,使得整个代码注释变得生动. 下面的截图是一个例子: 当编写C的.h文件的时候,在注释区域/* */ 用artist mode编辑,十分方便.具体参考视频: http://www.cinsk.org/emacs/emacs-artist.html

python中的turtle库绘制图形

1. 前奏: 在用turtle绘制图形时,需要安装对应python的解释器以及IDE,我安装的是pycharm,在安装完pycharm后,在pycharm安装相应库的模块,绘图可以引入turtle模块,想要进行运算可以引入numpy模块. 需要注意: 在pycharm 中 turtle 是不支持提示的,可能是动态语言的一种毛病吧 turtle绘图常用的函数有: : 操纵海龟绘图有着许多的命令,这些命令可以划分为两种:一种为运动命令,一种为画笔控制命令 (1)画笔运动命令: 命令 说明 turtl

html5 Canvas绘制图形入门详解

html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome.Opera.Safari.IE9+)都已经开始支持html5了.除此之外,在移动浏览器市场上,众多的移动浏览器也纷纷展开关于「html5的支持能力以及性能表现」的军备竞赛.html作为革命性的网页技术标准,再加上众多浏览器厂商或组织的鼎力支持,可以想见,html5将会成为未来网页技术的领头羊. ht