Android canvas画布,Android 画布Canvas
写完 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相关推荐
- s时钟画布 android,Android UI编程进阶——使用SurfaceViewt和Canvas实现动态时钟
概述: 很多时候我们想要自己写一些类似时钟.罗盘的控件,却又找不到合适的Demo.我想这时你可能索性就直接上图片了.在Android有Canvas和Paint这么好的画师的情况下,还是选择使用图片,的 ...
- android画布设置最外层,Android自定义View高级(三)-Canvas之画布操作
一.Canvas简介 Canvas我们可以称之为画布,能够在上面绘制各种东西,是Android平台2D图形绘制的基础. 二.Canvas的常用操作 操作类型 相关API 备注 绘制颜色 drawCol ...
- Android之Canvas画笔和画布
久违的Canvas画布,终于学到这里了,学完以后附上博文一篇以便日后记不住. 目录 一.Canvas(画布) 二.Paint(画笔) 三.实例 涉及的相关知识点 1.绘制安卓机器人 2.绘制文本 3. ...
- 【Android UI】Canvas 画布 ③ ( Canvas 图层栈 | Canvas#saveLayer() 新建图层 | Canvas 状态栈保存信息标志位 )
文章目录 一.Canvas#saveLayer() 新建图层 二.Canvas 状态栈保存信息标志位 Canvas 状态保存机制 中 , 存在两个栈结构 , 分别是 状态栈 和 图层栈 ; 其中 图层 ...
- android画布裁剪,Android 2D Graphics学习(二)、Canvas篇2、Canvas裁剪和Region、RegionIterator...
请先阅读: canvas 还提供裁剪的功能. 裁剪功能由Canvas提供的一系列的clip...方法 和quickReject方法来完成. 前面已经提到,真正提供可绘制区域的是Canvas内部的mut ...
- Android心电数据分析,Android SurfaceView+Canvas画脉搏/心电数据图-Go语言中文社区
实际演示效果: Canvas 画图基本步骤: 1.布局添加一个SurfaceView<?xml version="1.0" encoding="utf-8" ...
- android 自定义paint,Android自定义View中Paint、Rect、Canvas介绍(一)
自定义View对于新手而言貌似是一个很复杂的东西.格式,各函数的意义.对于大神经常忘记各函数及一些参数的具体写法及意义,刚好在做一个风车效果,把过程及遇到的问题都写下来 1.如何自定义一个View p ...
- android画布_Android画布
android画布 In this tutorial, we'll be discussing a very important part of Android i.e. Canvas. It's a ...
- Android中使用SurfaceView和Canvas来绘制动画
事实上每一个View中都有Canvas能够用来绘制动画.仅仅须要在这个View中重载onDraw()方法就能够,可是SurfaceView类是一个专门用来制动动画的类. Canvas(中文叫做&quo ...
- 初学Android,图形图像之使用Canvas,Paint绘图(二十五)
下面是一个画各种图形的例子,具体的画图方法不用特别解释,看API就可以了 先定义一个继承自View的类DrawView package WangLi.Graphics.MyView;import an ...
最新文章
- 盘点 15 个好用的 API 接口管理神器
- 项目性能优化(页面静态化2)
- html圆形修饰,HTML修饰效果集锦(演示与代码)
- GitLab10安装-部署-汉化-备份-升级
- 今天刚刚开通了写播客的功能,以后记录工作学习的点点滴滴
- Java死锁故障排除和解决
- LeetCode第14题:最长公共前缀
- portainer使用阿里云docker镜像加速器
- 微观经济学 —— 公用品悲剧(tragedy of commons)
- 被监控机上安装nagios插件和nrpe(nrpe添加为xinetd服务)
- opencv基本绘图函数--点,线,矩形,圆等
- aspose转pdf乱码问题
- 【通信系统信道估计】
- android 电源管理驱动
- 计算机在水产养殖学中的应用,计算机技术在生物学中的应用
- AP 计算机 从D到A,8节课完成飞跃的进步----麻省理工老师的学生如何说
- 基于SSM酒店管理系统
- 耿庆国 的旱震理论(可能这个理论不是他先提出来的)
- linux重启docker镜像没了,解决docker run 或者 docker restart 启动镜像就自动退出
- Au2021安装教程,Audition2021安装教程