1.Canvas 画布

画布类 Canvas 封装了图形和图片绘制等内容,此类常用的函数说明如下:

drawColor(int color)

作用:绘制颜色覆盖画布,常用于刷屏

参数:颜色值,也可用十六进制形式表示(ARGB)

drawText(String text,float x,float y,Paint paint)

作用:绘制文本字符

第一个参数:文本内容

第二、三个参数:文本的X、Y坐标

第四个参数:画笔实例

drawPoint(float x,float y,Paint paint)

作用:绘制像素点

第一、二个参数:像素的X、Y坐标

第三个参数:画笔实例

drawPoints(float[] pts,Paint paint)

作用:绘制多个像素点

第一个参数:Float 数组,数组中放置的是多个像素点的X,Y坐标

第二个参数:画笔实例

drawLine(float startX,float startY,float stopX,float stopY,Paint paint)

作用:绘制一条直线

前两个参数:起始点的X,Y坐标

后两个参数:终点的X,Y坐标

最后一个参数:画笔实例

drawLines(float[] pts,Paint paint)

作用:绘制多条直线

第一个参数:Float 数组,数组中放置的是多个直线的起始点与终点X,Y坐标

第二个参数:画笔实例

drawRect(Rect rect,Paint paint)

作用:绘制矩形

第一个参数:矩形实例

第二个参数:画笔实例

drawRoundRect(Rect rect,float x,float y,Paint paint)

作用:绘制圆角矩形

第一个参数:矩形实例

第二个参数:圆角X轴的半径

第三个参数:圆角Y轴的半径

第四个参数:画笔实例

drawCircle(float xc,float yc,float radius,Paint paint)

作用:绘制圆形

第一、二个参数:圆形的中心点X,Y坐标

第三个参数:圆形的半径

第四个参数:画笔实例

drawArc(RectF oval,float startAngle,float sweepAngle,boolean useCenter,Paint paint)

作用:绘制弧形(扇形)

第一个参数:矩形实例

第二个参数:弧形的起始角度(默认45º为图形的起始角度0º)

第三个参数:弧形的终止角度

第四个参数:是否绘制中心点;如果为真,起始点和终止点都会分别连接中心点,从而形成封闭图形;如果为假,则起始点直接连接终止点,从而形成封闭图形

第五个参数:画笔实例

drawOval(RectF oval,Paint paint)

作用:绘制椭圆

第一个参数:矩形实例

第二个参数:画笔实例

drawPath(Path path,Paint paint)

作用:绘制指定路径图形

第一个参数:路径实例

第二个参数:画笔实例

drawTextOnPath(String text,Path path,float hOffset,float vOffset,Paint paint)

作用:将文本沿着指定路径进行绘制

第一个参数:本文

第二个参数:路径实例

第三个参数:文本距离绘制起点的距离

第四个参数:文本距离路径的距离

第五个参数:画笔实例

Rect:矩形类,利用两个点的坐标从而确定矩形的大小;

其常用的构造函数为:

Rect(float left,float top,float right,float bottom)

第一、二个参数表示矩形的左上角坐标;

第三、四个参数表示矩形的右下角坐标;

Android 中还提供一个RectF 类,RectF 类与Rect 类主要的区别是长度单位精确度不同;RectF 使用单精度浮点数,而Rect 使用int 类型;在使用 Canvas 绘制矩形时,可以直接传入矩形的四个参数的方式,也可以选择传入一个矩形实例。

Path:指定绘制的路径,然后按照其路径的路线依次绘制,组合任意需要的图形。

其常用函数如下:

moveTo(float x,float y)

作用:设定路径的起始点

两个参数:起始点的坐标

lineTo(float x,float y)

作用:以上次的终点作为起点,以本次的坐标点为终点,两点之间使用一条直线连接

两个参数:本次点线的终点位置

close()

作用:路径结束的标识,如果路径关闭前的点不是起点,将自动连接封闭。

以上的moveTo、lineTo 与 close 三个函数搭配使用,路径起点与终点只需要设置一次,而路线lineTo 则可以设置多个。

android.graphics.Path.quadTo(float x1,float y1,float x2,float y2)

作用:绘制贝塞尔曲线

第一个参数:操作点的x坐标

第二个参数:操作点的y坐标

第三个参数:结束点的x坐标

第四个参数:结束点的y坐标

2.Canvas画布实例

效果图如下:

步骤:新建项目“CanvasProject”,游戏框架为MySurfaceView 游戏框架,具体步骤参照“11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)”。

主要绘图方法myDraw()修改如下:

  1. public void myDraw()
  2. {
  3. try {
  4. canvas =sfh.lockCanvas();
  5. if(canvas!=null)
  6. {
  7. //--利用填充画布,刷屏
  8. canvas.drawColor(Color.BLACK);
  9. //--绘制文本
  10. canvas.drawText("DrawText",10,15,paint);
  11. //--绘制像素点
  12. canvas.drawPoint(10,20,paint);
  13. //--绘制多个像素点
  14. canvas.drawPoints(new float[]{10,30,30,30},paint);
  15. //--绘制直线
  16. canvas.drawLine(10,40,50,40,paint);
  17. //--绘制多条直线
  18. canvas.drawLines(new float[]{10,50,50,50,70,50,110,50},paint);
  19. //--绘制矩形
  20. canvas.drawRect(10,60,40,100,paint);
  21. //--绘制矩形2
  22. Rect rect = new Rect(10,110,60,130);
  23. canvas.drawRect(rect,paint);
  24. //--绘制圆角矩形
  25. RectF rectF = new RectF(10,140,60,170);
  26. canvas.drawRoundRect(rectF,20,20,paint);
  27. //--绘制圆形
  28. canvas.drawCircle(20,200,20,paint);
  29. //--绘制弧形
  30. canvas.drawArc(new RectF(150,20,200,70),0,230,true,paint);
  31. //--绘制椭圆
  32. canvas.drawOval(new RectF(150,80,180,100),paint);
  33. //--绘制指定路径
  34. Path path = new Path();
  35. //设置路径起点
  36. path.moveTo(160,150);
  37. //路线1
  38. path.lineTo(200,150);
  39. //路线2
  40. path.lineTo(180,200);
  41. //路径结束
  42. path.close();
  43. canvas.drawPath(path,paint);
  44. //--绘制指定路径图形
  45. Path pathCircle = new Path();
  46. //添加一个圆形额路径
  47. pathCircle.addCircle(130,260,20,Path.Direction.CCW);
  48. //--绘制带圆形的路径文本
  49. canvas.drawTextOnPath("PathText",pathCircle,10,20,paint);
  50. }
  51. }
  52. catch(Exception ex){
  53.  
  54. }finally {
  55. if(canvas!=null)
  56. {
  57. sfh.unlockCanvasAndPost(canvas);
  58. }
  59. }
  60. }

【读书笔记《Android游戏编程之从零开始》】12.游戏开发基础(Canvas 画布)的更多相关文章

  1. Windows游戏编程之从零开始d

    Windows游戏编程之从零开始d I'm back~~恩,几个月不见,大家还好吗? 这段时间真的好多童鞋在博客里留言说或者发邮件说浅墨你回来继续更新博客吧. woxiangnifrr童鞋说每天都在来 ...

  2. Java并发编程的艺术读书笔记(2)-并发编程模型

    title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...

  3. Java并发编程的艺术读书笔记(1)-并发编程的挑战

    title: Java并发编程的艺术读书笔记(1)-并发编程的挑战 date: 2017-05-03 23:28:45 tags: ['多线程','并发'] categories: 读书笔记 --- ...

  4. 读书笔记--Android Gradle权威指南(下)

    前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...

  5. 《Essential C++》读书笔记 之 C++编程基础

    <Essential C++>读书笔记 之 C++编程基础 2014-07-03 1.1 如何撰写C++程序 头文件 命名空间 1.2 对象的定义与初始化 1.3 撰写表达式 运算符的优先 ...

  6. 【读书笔记《Android游戏编程之从零开始》】18.游戏开发基础(碰撞检测)

    1.矩形碰撞 所谓矩形碰撞,就是利用两个矩形之间的位置关系来进行判断,如果矩形的像素在另外一个矩形之中,或者之上都可以认为这两个矩形发生了碰撞. 如果单纯的去考虑哪些情况会判定两个矩形发生碰撞,倒不如 ...

  7. 【读书笔记《Android游戏编程之从零开始》】17.游戏开发基础(游戏适屏的简述和作用、让游戏主角动起来)

    1.游戏适屏的简述和作用 由于市面上安装 Android 系统的手机不断增多,出现了各种分辨率.各种屏幕尺寸的Android 系统手机.为了保证一个游戏或者一个软件能在所有的 Android 手机上正 ...

  8. 【读书笔记《Android游戏编程之从零开始》】19.游戏开发基础(游戏音乐与音效)

    在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的就是游戏的背景音乐与音效:合适的背景音乐以及精彩的音效搭配会令整个游戏上升一个档次. 在 Android 中.常用于播放游戏背景音乐的类是 ...

  9. 【读书笔记《Android游戏编程之从零开始》】16.游戏开发基础(动画)

    1. Animation动画   在Android 中,系统提供了动画类 Animation ,其中又分为四种动画效果: ● AlphaAnimation:透明度渐变动画 ● ScaleAnimati ...

随机推荐

  1. javascript: jquery.gomap-1.3.3.js

    from:http://www.pittss.lv/jquery/gomap/solutions.php jquery.gomap-1.3.3.js: /** * jQuery goMap * * @ ...

  2. ASP.NET MVC进阶二

    一.数据验证 数据验证的步骤 在模型类中添加与验证相关的特性标记 在客户端导入与验证相关的js文件和css文件 使用与验证相关的Html辅助方法 在服务器端判断是否通过服务器端验证 常用的验证标记 R ...

  3. win32程序启用控制台

    #include <cstdio> #define USE_WIN32_CONSOLE int APIENTRY wWinMain(_In_ HINSTANCE hInstance, _I ...

  4. ahjesus fstab修改错误了如何修复

    fstab修改错误了如何修复   当你不小心把磁盘表输入错误以后,系统总是让你按ctrl+D重新启动或者输入密 码进入shell,你输入密码登陆后,   编辑文件是只读的,执行下面的命令后就可以编辑了 ...

  5. FPSCalc——简单FPS观测类

    利用Unity做的手游项目很多时候要保证流畅度,流畅度最直观的表现就是帧率FPS.Unity编辑器模式下的帧率观测几乎没有意义,所以还是自己实现的好. 这里给一个前人写的类,我几乎原封不动,该类只有一 ...

  6. Java中的GOF23(23中设计模式)--------- 工厂模式(Factory)

    Java中的GOF23(23中设计模式)--------- 工厂模式(Factory) 在给大家介绍工厂模式之前,我想和大家聊聊面向对象的那点事,在这里,引入三个概念. 开闭原则(Open Close ...

  7. Linux初学者指南

    1.为啥我们要学习Linux? 我们干嘛要学习Linux? Linux能给我们带来什么价值呢? Linux给我的感觉就是稳定,免费,性能好. 稳定,体现在哪里?我们使用PC机,安装的操作系统一般是wi ...

  8. OS X 在Cisco无线环境下丢包分析 part 2

    part 1说到,单播的ARP请求最终都被网关丢弃了,从而造成了丢包.先说我最终怎么解决的吧,我最终把核心交换上针对无线VLAN的arp inspection和dhcp snooping删掉了,然后出 ...

  9. ArcGIS使用Python脚本工具

    在Pyhton写的一些代码,用户交互不方便,用户体验比较差,不方便重用.在ArcGIS中可以将用写的Python代码导入到ToolBox中,这样用起来就比较方便了.这里用按要素裁剪栅格的Python来 ...

  10. Android项目实战(五):TextView自适应大小

    对于设置TextView的字体默认大小对于UI界面的好看程度是很重要的,小屏幕设置的文字过大或者大屏幕设置的文字过小都造成UI的不美观 现在就让我们学习自适应大小的TextView控件,即当文字长度变 ...