canvas中包含了作图的方法。 完成作图过程,最基本的四大组件是,canvas, bitmap, drawing prmitive, paint. 其中canvas是画布,包含了作图的方法。作图方法最终需要保存在bitmap当中。 作图的图元,如矩形,轨迹,字,bitmap(是一个图形),paint相当于颜料,它指定了作图的颜色和作图的风格。
利用canvas作图,有几种方法,一般而言,用户使用view布局作图,这种方法适合对性能不敏感,并且控件不需要动态改变的情况。
如果用户需要自己作图,如video game。则有两种方法。
1)可以直接利用view,重载onDraw方法,调用canvas的drawing calls来作图;这种作图过程占用的是UI thread.
2) 或者利用surfaceview作图。这种作图方法会创建单独的thread,作图更快速。
以上的总结来自于这篇文章,它介绍了如何使用canvas作图的基本方法。
http://developer.android.com/guide/topics/graphics/2d-graphics.html#draw-with-canvas
下面两篇文章给出了实例,如何在canvas上,利用custom view作图
http://blog.sina.com.cn/s/blog_61ef49250100qw9x.html
http://www.cnblogs.com/stulife/archive/2010/08/19/1803313.html
下面的代码实例中,显示了如何利用canvas 往surfaceview作图。
package org.example.sudoku;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.SurfaceHolder.Callback;
import android.view.animation.Animation;public class MySurfaceView extends SurfaceView implements Callback, Runnable {// 备注1private SurfaceHolder sfh;private Thread th;private Canvas canvas;private Paint paint;private int ScreenW, ScreenH;public MySurfaceView(Context context) {super(context);th = new Thread(this);sfh = this.getHolder();sfh.addCallback(this); // 备注1paint = new Paint();paint.setAntiAlias(true);paint.setColor(Color.RED);this.setKeepScreenOn(true);// 保持屏幕常亮}@Overridepublic void startAnimation(Animation animation) {super.startAnimation(animation);}public void surfaceCreated(SurfaceHolder holder) {ScreenW = this.getWidth();// 备注2ScreenH = this.getHeight();th.start();}private void draw() {try {canvas = sfh.lockCanvas(); // 得到一个canvas实例canvas.drawColor(Color.WHITE);// 刷屏canvas.drawText("Himi", 100, 100, paint);// 画文字文本canvas.drawText("这就是简单的一个游戏框架", 100, 130, paint);} catch (Exception ex) {} finally { // 备注3if (canvas != null)sfh.unlockCanvasAndPost(canvas); // 将画好的画布提交}}public void run() {while (true) {draw();try {Thread.sleep(100);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}public void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}public void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stub}
}

代码解释:

0) surfaceview初始化的时候,创建了一个thread。因为这个surfaceview 继承与runnable接口,所以this指针可以传给这个thread.

当这个thread开始运行时,它会从this.run ()开始运行。

1) surface创建的时候,会调用到surfaceCreated()。这个函数中调用了一个thread.start()。这样这个thread就运行在run()函数当中。

2)run函数调用draw()方法,绘制图形。

  

转载于:https://www.cnblogs.com/geeks/p/3283231.html

android graphic:canvas相关推荐

  1. Android之canvas详解

    首先说一下canvas类: Class Overview The Canvas class holds the "draw" calls. To draw something, y ...

  2. Android Graphic 架构

    原址 这篇文章中,我们会展示android Graphic 的架构. Androidframework 我们知道Android framework 提供了两大类graphicrender API.一是 ...

  3. Android中Canvas绘图之Shader使用图文详解

    概述 我们在用Android中的Canvas绘制各种图形时,可以通过Paint.setShader(shader)方法为画笔Paint设置shader,这样就可以绘制出多彩的图形.那么Shader是什 ...

  4. android中matrix的单位,Android中canvas和matrix之间的关系是什么?

    我读了这个画布概述: The Canvas class holds the "draw" calls. To draw something, you need 4 basic co ...

  5. Android之Canvas的drawRoundRect()

    1 问题 Canvas的drawRoundRect()函数怎么用 public void drawRoundRect(RectF rect, float rx, float ry, Paint pai ...

  6. Android可滑动画板,Android 利用 Canvas 画画板

    首先新建一个项目工程,建立文件,如下图所示 首先配置页面布局文件activity_main.xml,如下图所示: xmlns:tools="http://schemas.android.co ...

  7. Android之Canvas画笔和画布

    久违的Canvas画布,终于学到这里了,学完以后附上博文一篇以便日后记不住. 目录 一.Canvas(画布) 二.Paint(画笔) 三.实例 涉及的相关知识点 1.绘制安卓机器人 2.绘制文本 3. ...

  8. android canvas 背景图片,Android更改canvas背景颜色而不会丢失任何图纸

    已经给出了你的问题的答案都指向了正确的方向:你需要在单独的图层中分离背景颜色块和前景图,然后合并它们,然后将它们全部保存在.png文件中. 这就是Adobe Photoshop工作流程的设计--如果我 ...

  9. android paint跑马灯,Android使用Canvas实现跑马灯

    网上的很多的教程都是通过更改TextView的属性进行跑马灯的设计.这样做有很多的缺点: 1.如果TextView没有获取焦点,那么跑马灯的效果无法实现. 2.如果文本长度小于TextView的宽度, ...

最新文章

  1. 使用注解打造自己的IOC框架
  2. 深度强化学习入门介绍
  3. 用VS.NET2003制作WEB应用程序的安装包
  4. arduino tft 方向_ESP32在Arduino环境下玩转 LVGL,ESP32移植LVGL详细教程
  5. java 内存情况_java查看jvm内存使用情况
  6. 一起谈.NET技术,ASP.NET MVC2.0在Tab页中实现异步无刷新分页
  7. CSS 属性选择器备忘
  8. linux1.0内核下载,LINUX1.0 内核是系统的心脏 - 下载 - 搜珍网
  9. 物联网四大产业群的典型应用场景
  10. 谷歌浏览器如何正确离线网页
  11. 关于购买域名的一些建议
  12. 线性方程组解个数的判定和求解
  13. 联想拯救者wif开不了_联想拯救者为什么连不上wifi
  14. 第四节 电路心法 基尔霍夫电压定律与电流定律
  15. Banner本地,网络,图片轮播
  16. js 和 min.js 有什么区别
  17. Revit插件建模助手尺寸定位标注和标注避让操作
  18. 14、RH850 F1 RAM存储器介绍
  19. LG P5238 整数校验器
  20. 噁二唑和三唑衍生物(PXZ-OXD, 2PXZ-OXD,2PXZ-TAZ,PXZ-TAZ)

热门文章

  1. 一图看懂新一代人工智能知识体系大全
  2. 寒武纪创始人兼CEO陈天石博士的公开信
  3. 全球自动驾驶汽车发展指数哪家强?美德领衔,中国第七
  4. DeepMind推出分布式深度强化学习架构IMPALA,让一个Agent学会多种技能
  5. Go在招聘中最吃香、安全工程师薪资涨幅最高 | Hired年度软件工程师报告出炉
  6. 看清本质:程序员为什么会写Bug?
  7. VS2005右键点击转到定义后出现“未定义符号”的提示及其解决
  8. keepalived 高可用日志说明及实战配置日志路径
  9. 课后作业-阅读任务-阅读提问-3
  10. Python实现JSON反序列化类对象