写完 Android 画笔Paint,自然少不了Canvas画布,本文延续上篇风格,一一来过Canvas API

drawARGB

1void drawARGB (int a,int r,int g,int b)

统一颜色绘制,四个参数取值范围0~255

drawArc

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

绘制弧面或弧线。对于绘制对应图形的填充面,还是图形的轮廓线,这在于画笔Paint中的setStyle。

oval:矩形;

startAngle:起点角度,0度的角度对应于0度的几何角(在手表3点钟);

sweepAngle:顺时针扫过的角度;

useCenter:弧面或弧线;

paint:画笔

弧面12RectF rectF = new RectF(100f, 100f, 500f, 500f);canvas.drawArc(rectF, 0, 150, true, mPaint);

弧线12RectF rectF = new RectF(100f, 100f, 500f, 500f);canvas.drawArc(rectF, 0, 150, false, mPaint);

drawBitmap

绘制使用指定的矩阵的位图。123456789101112131415//方法1void drawBitmap (Bitmap bitmap,float left,float top,Paint paint)//方法2void drawBitmap (Bitmap bitmap,Rect src,Rect dst,Paint paint)//方法3void drawBitmap (Bitmap bitmap,Matrix matrix,Paint paint)

例子代码1234567891011121314mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.logo);canvas.drawBitmap(mBitmap, 0, 0, mPaint);//绘制Bitmap的一部分,并对其拉伸//srcRect绘制Bitmap的哪一部分Rect src = new Rect(0, 0, mBitmap.getWidth(), mBitmap.getHeight() / 3);//dstRecF绘制的Bitmap拉伸到哪里RectF dst = new RectF(0, mBitmap.getHeight(), canvas.getWidth(), mBitmap.getHeight() + 200);canvas.drawBitmap(mBitmap, src, dst, mPaint);Matrix matrix = new Matrix();matrix.postTranslate(0, mBitmap.getHeight() + 200);canvas.drawBitmap(mBitmap, matrix, mPaint);

drawBitmapMesh

12345678void drawBitmapMesh (Bitmap bitmap,int meshWidth,int meshHeight,float[] verts,int vertOffset,int[] colors,int colorOffset,Paint paint)

绘制网格顶点被均匀地分布在该位图

bitmap:位图

meshWidth:横向上把该源位图划成成多少格

meshHeight:竖向上把该源位图划成成多少格

verts:长度为(meshWidth + 1) (meshHeight + 1)2的数组,它记录了扭曲后的位图各顶点位置

vertOffset:控制verts数组中从第几个数组元素开始才对bitmap进行扭曲

colors:可以为null,指定在每个顶点,其值由对应的位图颜色相乘内插的颜色。如果不为空,必须有至少(meshWidth+ 1)*(meshHeight+ 1)+ colorOffset数组中的值。

colorOffset int: Number of color elements to skip before drawing

paint:画笔,可以为null

drawCircle

1234void drawCircle (float cx,float cy,float radius,Paint paint)

绘制圆

cx,cy代表圆心的坐标

radius圆的半径

paint画笔1canvas.drawCircle(500f, 500f, 200, mPaint);

drawColor

1void drawColor (int color)

设置画布颜色

drawLine

1234567891011void drawLine (float startX,float startY,float stopX,float stopY,Paint paint)void drawLines (float[] pts,Paint paint)void drawLines (float[] pts,int offset,int count,Paint paint)

画线

方法1

startX,startY起点坐标

stopX,stopY终点坐标

paint画笔

方法2

pts:绘制直线的端点数组,每条直线占用4个数据,即起终点坐标。

paint:绘制直线所使用的画笔。

方法2

pts:绘制直线的端点数组,每条直线占用4个数据,即起终点坐标。

offset:跳过的数据个数,取值为4的倍数。

count:实际参与绘制的数据个数。

paint:绘制直线所使用的画笔。

1canvas.drawLine(100f,100f,500f,500f,mPaint);

12345float[] pts = {100f, 100f, 400f, 400f,400f, 400f, 250f, 560f,250f, 560f, 400f, 800f,400f, 800f, 280f, 880f};canvas.drawLines(pts, mPaint);

123456float[] pts = {100f, 100f, 400f, 400f,400f, 400f, 250f, 560f,250f, 560f, 400f, 800f,400f, 800f, 280f, 880f};//有选择地绘制直线canvas.drawLines(pts, 4, 8, mPaint);

跳过前4个数据,绘制后面8的数据,即绘制了第二第三个点:

drawOval

1void drawOval (RectF oval,Paint paint)

绘制椭圆1234RectF rectF = new RectF(100f, 100f, 600f, 500f);//等同于圆的效果//RectF rectF = new RectF(100f, 100f, 500f, 500f);canvas.drawOval(rectF, mPaint);

drawPath

1void drawPath (Path path,Paint paint)

例子12345Path path = new Path();//向Path中加入ArcRectF arcRecF = new RectF(0, 0, 500, 500);path.addArc(arcRecF, 0, 135);canvas.drawPath(path, mPaint);

更多Path(宝藏,可继续挖掘),详见博客android绘图之Path总结

drawPoint

123void drawPoint (float x,float y,Paint paint)

绘制点,x,y分别是点坐标123456void drawPoints (float[] pts,int offset,int count,Paint paint)void drawPoints (float[] pts,Paint paint)

drawPoints与drawLines类似

drawRGB

123void drawRGB (int r,int g,int b)

RGB绘制画布颜色,取值也是0~255

drawRect

12345void drawRect (float left,float top,float right,float bottom,Paint paint)

绘制矩形,前四个参数分别表示矩形的左,顶,右,低

12void drawRect (Rect r,Paint paint)void drawRect (RectF rect,Paint paint)

Rect 和 RectF区别是Rect初始化 是int,RectF 是left

1canvas.drawRect(100f,100f,500f,500f,mPaint);

drawRoundRect

1234void drawRoundRect (RectF rect,float rx,float ry,Paint paint)

绘制圆矩形

rx:圆角x方向的半径

ry:圆角y方向的半径

12RectF rectF = new RectF(100f, 100f, 500f, 500f);canvas.drawRoundRect(rectF, 50, 150, mPaint);

drawText

12345678910111213141516void drawText (CharSequence text,int start,int end,float x,float y,Paint paint)void drawText (String text,float x,float y,Paint paint)void drawText (String text,int start,int end,float x,float y,Paint paint)

绘制文本

start:指的文本从哪个开始;end:文本结束的位置;x,y:文本起点1234mPaint.setTextSize(50);String text = "我的微信公众号:吴小龙同学";canvas.drawText(text, 2, text.length(), 100, 100, mPaint)canvas.drawText("我的微信公众号:吴小龙同学", 100, 400, mPaint);

drawTextOnPath

123456789101112void drawTextOnPath (String text,Path path,float hOffset,float vOffset,Paint paint)void drawTextOnPath (char[] text,int index,int count,Path path,float hOffset,float vOffset,Paint paint)

沿着Path绘制一段文字

hOffset : 与路径起始点的水平偏移距离

vOffset : 与路径中心的垂直偏移量

12345678Path path = new Path();//Path.Direction.CW,沿外环;Path.Direction.CCW,沿内环path.addCircle(500, 500, 200, Path.Direction.CW);mPaint.setTextSize(50);// 绘制路径canvas.drawPath(path, mPaint);String text = "我的微信公众号:吴小龙同学";canvas.drawTextOnPath(text, path, 0f, 0f, mPaint);

drawVertices

123456789101112void drawVertices (Canvas.VertexMode mode,int vertexCount,float[] verts,int vertOffset,float[] texs,int texOffset,int[] colors,int colorOffset,short[] indices,int indexOffset,int indexCount,Paint paint)

绘制顶点数组

Android canvas画布,Android 画布Canvas相关推荐

  1. s时钟画布 android,Android UI编程进阶——使用SurfaceViewt和Canvas实现动态时钟

    概述: 很多时候我们想要自己写一些类似时钟.罗盘的控件,却又找不到合适的Demo.我想这时你可能索性就直接上图片了.在Android有Canvas和Paint这么好的画师的情况下,还是选择使用图片,的 ...

  2. android画布设置最外层,Android自定义View高级(三)-Canvas之画布操作

    一.Canvas简介 Canvas我们可以称之为画布,能够在上面绘制各种东西,是Android平台2D图形绘制的基础. 二.Canvas的常用操作 操作类型 相关API 备注 绘制颜色 drawCol ...

  3. Android之Canvas画笔和画布

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

  4. 【Android UI】Canvas 画布 ③ ( Canvas 图层栈 | Canvas#saveLayer() 新建图层 | Canvas 状态栈保存信息标志位 )

    文章目录 一.Canvas#saveLayer() 新建图层 二.Canvas 状态栈保存信息标志位 Canvas 状态保存机制 中 , 存在两个栈结构 , 分别是 状态栈 和 图层栈 ; 其中 图层 ...

  5. android画布裁剪,Android 2D Graphics学习(二)、Canvas篇2、Canvas裁剪和Region、RegionIterator...

    请先阅读: canvas 还提供裁剪的功能. 裁剪功能由Canvas提供的一系列的clip...方法 和quickReject方法来完成. 前面已经提到,真正提供可绘制区域的是Canvas内部的mut ...

  6. Android心电数据分析,Android SurfaceView+Canvas画脉搏/心电数据图-Go语言中文社区

    实际演示效果: Canvas 画图基本步骤: 1.布局添加一个SurfaceView<?xml version="1.0" encoding="utf-8" ...

  7. android 自定义paint,Android自定义View中Paint、Rect、Canvas介绍(一)

    自定义View对于新手而言貌似是一个很复杂的东西.格式,各函数的意义.对于大神经常忘记各函数及一些参数的具体写法及意义,刚好在做一个风车效果,把过程及遇到的问题都写下来 1.如何自定义一个View p ...

  8. android画布_Android画布

    android画布 In this tutorial, we'll be discussing a very important part of Android i.e. Canvas. It's a ...

  9. Android中使用SurfaceView和Canvas来绘制动画

    事实上每一个View中都有Canvas能够用来绘制动画.仅仅须要在这个View中重载onDraw()方法就能够,可是SurfaceView类是一个专门用来制动动画的类. Canvas(中文叫做&quo ...

  10. 初学Android,图形图像之使用Canvas,Paint绘图(二十五)

    下面是一个画各种图形的例子,具体的画图方法不用特别解释,看API就可以了 先定义一个继承自View的类DrawView package WangLi.Graphics.MyView;import an ...

最新文章

  1. 盘点 15 个好用的 API 接口管理神器
  2. 项目性能优化(页面静态化2)
  3. html圆形修饰,HTML修饰效果集锦(演示与代码)
  4. GitLab10安装-部署-汉化-备份-升级
  5. 今天刚刚开通了写播客的功能,以后记录工作学习的点点滴滴
  6. Java死锁故障排除和解决
  7. LeetCode第14题:最长公共前缀
  8. portainer使用阿里云docker镜像加速器
  9. 微观经济学 —— 公用品悲剧(tragedy of commons)
  10. 被监控机上安装nagios插件和nrpe(nrpe添加为xinetd服务)
  11. opencv基本绘图函数--点,线,矩形,圆等
  12. aspose转pdf乱码问题
  13. 【通信系统信道估计】
  14. android 电源管理驱动
  15. 计算机在水产养殖学中的应用,计算机技术在生物学中的应用
  16. AP 计算机 从D到A,8节课完成飞跃的进步----麻省理工老师的学生如何说
  17. 基于SSM酒店管理系统
  18. 耿庆国 的旱震理论(可能这个理论不是他先提出来的)
  19. linux重启docker镜像没了,解决docker run 或者 docker restart 启动镜像就自动退出
  20. Au2021安装教程,Audition2021安装教程

热门文章

  1. 向量范数与矩阵范数的理解
  2. SharePoint 2013 入门教程
  3. EternalBlue 永恒之蓝 SMB 漏洞底层实现介绍
  4. hook 系统方法_了解WordPress Hook系统中的命名空间
  5. 国际班级花名册!!!!
  6. 记录一下我在刷题的过程中发现我没记住的知识
  7. MeeGo的创新模式-(讨论MeeGo与Android的比较和选择)
  8. WEBAPI 的简单示例
  9. 最新版本KT6368A的固件内部修改点说明
  10. 内容付费和知识付费的关系