Android中Canvas类的介绍

   这里简单介绍一下当自定义View时在onDraw(Canvas canvas)方法中绘制相关图形的简单介绍。Canvas指的是画布,我们可以在画布上画很多图形,例如:画圆、画弧形、画线等等。Canvas类要结合画笔Paint类来使用,我们在画布上画图形前,首先需要设置画笔的相关属性,然后才能使用这个画笔在画布上画对应的图形,有关画笔Paint的使用在上一篇文章中有介绍。下边介绍一下Canvas类的几个常用的绘制图形的方法:
介绍一下RectF类,这个类的对象表示一个区域:
RectF rect = new RectF(left, top, right, bottom);四个参数分别代表左上右下的坐标
canvas.drawRect(RectF,Paint)方法用于画矩形,第一个参数为图形显示区域,第二个参数为画笔,设置好图形显示区域Rect和画笔Paint后,即可画图;
canvas.drawRoundRect(RectF, float, float, Paint) 方法用于画圆角矩形,第一个参数为图形显示区域,第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。
   
canvas.drawLine(startX, startY, stopX, stopY, paint):前四个参数的类型均为float,最后一个参数类型为Paint。表示用画笔paint从点(startX,startY)到点(stopX,stopY)画一条直线
canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint):画圆弧。第一个参数oval为RectF类型,即圆弧显示区域,startAngle和sweepAngle均为float类型,分别表示圆弧起始角度圆弧度数,3点钟方向为0度,useCenter设置是否显示圆心,boolean类型,paint为画笔;
canvas.drawCircle(float,float, float, Paint)方法用于画圆,前两个参数代表圆心坐标,第三个参数为圆半径,第四个参数是画笔;
canvas.drawText(String, float, float, Paint);方法用于画字符串,第一个参数表示要显示的字的内容,第二个参数和第三个参数表示要显示的字的位置坐标,这个坐标和我们设置画笔的属性有关,例如我们设置paint.setTextAlign(Paint.Align.CENTER);表示当前的坐标是以字体的中心位置为基准的。第四个参数是画笔。
下边我们通过画一个Android机器人的一个小例子来使用一下这些方法:
效果图如下:
主要的代码如下:
package com.example.painttest;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.RectF;import android.util.AttributeSet;import android.view.View;public class PaintView extends View {public PaintView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public PaintView(Context context, AttributeSet attrs) {super(context, attrs);}public PaintView(Context context) {super(context);}@Overrideprotected void onDraw(Canvas canvas) {Paint paint = new Paint();paint.setAntiAlias(true);paint.setStyle(Paint.Style.FILL_AND_STROKE);paint.setARGB(255, 0, 0, 255);// 机器人左臂drawRoundRect(canvas, paint, 50, 300, 110, 700);// 机器人右臂drawRoundRect(canvas, paint, getWidth() - 110, 300, getWidth() - 50,700);// 机器人身体drawRoundRect(canvas, paint, 130, 320, getWidth() - 130, 900);// 机器人左腿drawRoundRect(canvas, paint, 160, 930, 220, 1080);// 机器人右腿drawRoundRect(canvas, paint, getWidth() - 220, 930, getWidth() - 160,1080);// 机器人头部drawOval(canvas, paint, 130, 100, getWidth() - 130, 480, 180, 180,false);/** * 方法用于画圆,前两个参数代表圆心坐标,第三个参数为圆半径,第四个参数是画笔; *  */paint.setColor(Color.WHITE);// 机器人左眼canvas.drawCircle(getWidth() / 2 - 100, 200, 20, paint);// 机器人右眼canvas.drawCircle(getWidth() / 2 + 100, 200, 20, paint);/** * 前四个参数的类型均为float,最后一个参数类型为Paint。 * 表示用画笔paint从点(startX,startY)到点(stopX,stopY)画一条直线; */paint.setColor(Color.BLUE);paint.setStrokeWidth(30);// 机器人头部左角canvas.drawLine(130, 60, getWidth() / 2 - 100, 150, paint);// 机器人头部右角canvas.drawLine(getWidth() - 130, 60, getWidth() / 2 + 100, 150, paint);/** *  * 画字体 */paint.setColor(Color.WHITE);paint.setTextSize(500);paint.setStyle(Paint.Style.FILL);paint.setStrokeWidth(3);paint.setTextAlign(Paint.Align.CENTER);canvas.drawText("A", getWidth() / 2, 740, paint);}/** * 画圆角矩形的方法 *  * @param canvas * @param paint * @param left * @param top * @param right * @param bottom */private void drawRoundRect(Canvas canvas, Paint paint, float left,float top, float right, float bottom) {/** * 画圆角矩形 第一个参数为图形显示区域,四个参数分别为left、top、right、bottom * 第二个参数和第三个参数分别是水平圆角半径和垂直圆角半径。 *  */RectF rect = new RectF(left, top, right, bottom);canvas.drawRoundRect(rect, 20, 20, paint);}/** * 画椭圆的方法 */private void drawOval(Canvas canvas, Paint paint, float left, float top,float right, float bottom, float startAngle, float sweepAngle,boolean useCenter) {/** * 第一个参数oval为RectF类型,即圆弧显示区域, * startAngle和sweepAngle均为float类型,分别表示圆弧起始角度和圆弧度数,3点钟方向为0度, * useCenter设置是否显示圆心,boolean类型, paint为画笔; */RectF oval = new RectF(left, top, right, bottom);canvas.drawArc(oval, startAngle, sweepAngle, useCenter, paint);}}

   
需要源码的可以点击下边链接免费下载:
点击打开链接
参考链接:http://blog.sina.com.cn/s/blog_61ef49250100qw9x.html
   
       

更多相关文章

  1. Android视频开发-视频显示修正
  2. Android(安卓)View移动的3种方式总结
  3. Android之Handler与AsyncTask的那些事
  4. Android之文字描边
  5. 2012-7-18 Android(安卓)的Paint(画笔)及Canvas(画布)
  6. Android中 AsyncTask和Handler对比(特别有用)
  7. DDMS的使用、内存溢出的调试和模拟器的启动命令参数
  8. Android(安卓)Hack Retrofit 增强参数(固定参数)
  9. Android(安卓)数据存储:五大存储之SQLite数据存储

随机推荐

  1. 在Oracle SQL中将时间戳转换为日期
  2. =======sql 存储过程的"递 归"==来试下吗?
  3. 在论坛中出现的比较难的sql问题:23(随机填
  4. 我如何通过日期时间PIVOT TABLE或CrossTa
  5. PostgreSQL之序列使用
  6. 怎么样在MYSQL中把一个字符串转换成日期?
  7. mysql主从状态异常解决办法
  8. 在进行性能测试时如何避免SQL Server的“
  9. Ubuntu10.10安装Drupal7及其环境(apache,m
  10. 如何使用SQL语句查到当前SQL SERVER 2000