自定义View绘制基础之Canvas

画布Canvas

   Canvas(画布)是一个用于绘制图形的重要类,它提供了一组绘图操作的方法,允许你在屏幕上绘制各种形状、图像和文本。下面是Canvas类的主要函数:

目录

一、绘制图形和图像

1.drawColor

2.drawCircle

3.drawRect

4.drawLine

5.drawText

5.drawBitmap

二、绘制路径

1.drawPath

三、绘制几何图形

1.drawArc

2.drawOval`

四、裁剪

1.clipRect

2.clipPath

五、几何变换

1.translate

2.scale

3.rotate

4.skew

5.concat

六、保存和恢复画布

1.save()和restore()


一、绘制图形和图像

1.drawColor

功能:用指定的颜色填充整个画布

原型:

public void drawColor(@ColorInt int color) 

参数:

  •  color:要填充的颜色

示例:

drawColor(Color.BLACK);  // 纯黑
drawColor(Color.parse("#88880000"); // 半透明红色

2.drawCircle

功能:在画布上绘制一个圆形。

原型:

public void drawCircle(float cx, float cy, float radius, @NonNull Paint paint) 

参数:

  • cx:圆心的横坐标。

  • cy:圆心的纵坐标。

  • radius:圆的半径。

  • paint:用于指定绘制效果的画笔

示例:

Paint paint = new Paint();
​
paint.setColor(Color.RED); 
​
canvas.drawCircle(300, 300, 100, paint);
​

3.drawRect

功能:在画布上绘制一个矩形。

public void drawRect(float left, float top, float right, float bottom, @NonNull Paint paint) 

参数:

  • left:矩形左上角的横坐标。

  • top:矩形左上角的纵坐标。

  • right:矩形右下角的横坐标。

  • bottom:矩形右下角的纵坐标。

  • paint:用于指定绘制效果的画笔。

示例:

Paint paint = new Paint();
paint.setColor(Color.GREEN);
canvas.drawRect(100, 100, 400, 300, paint);

4.drawLine

功能:在画布上绘制一条直线。

原型:

public void drawLine(float startX, float startY, float stopX, float stopY, @NonNull Paint paint) 

参数:

  • startX:起点的横坐标。

  • startY:起点的纵坐标。

  • stopX:终点的横坐标。

  • stopY:终点的纵坐标。

  • paint:用于指定绘制效果的画笔。

示例:

Paint paint = new Paint();
paint.setColor(Color.BLACK);
canvas.drawLine(50, 50, 200, 200, paint);

5.drawText

功能: 在画布上绘制文本。

原型:

public void drawText(String text, float x, float y, @NonNull Paint paint)

参数:

  • text:要绘制的文本。

  • x:文本起始点的横坐标。

  • y:文本起始点的纵坐标。

  • paint:用于指定绘制效果的画笔。

示例:

Paint paint = new Paint();
paint.setColor(Color.BLUE);
paint.setTextSize(30);
canvas.drawText("Hello, Canvas!", 50, 50, paint);

5.drawBitmap

功能: 在画布上绘制位图。

原型:

void drawBitmap(Bitmap bitmap, float left, float top, Paint paint)

参数解释:

  • bitmap:要绘制的位图。
  • left:位图左上角的横坐标。
  • top:位图左上角的纵坐标。
  • paint:用于指定绘制效果的画笔。

示例:

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.sample_image); canvas.drawBitmap(bitmap, 100, 200, null);

二、绘制路径

1.drawPath

功能:在画布上绘制指定的路径。

原型:

public void drawPath(Path path, @NonNull Paint paint)

参数:

  • path:要绘制的路径。

  • paint:用于指定绘制效果的画笔。

示例:

Paint paint = new Paint();
paint.setColor(Color.RED);
Path path = new Path();
path.moveTo(100, 100);
path.lineTo(300, 100);
path.lineTo(200, 300);
path.close();
canvas.drawPath(path, paint);

三、绘制几何图形

1.drawArc

功能:在画布上绘制一个弧形。

原型:

public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint)

参数解释:

  • oval:包围弧形的矩形。

  • startAngle:弧形起始角度,以 x 轴正方向为 0 度。

  • sweepAngle:弧形扫过的角度。

  • useCenter:是否连接到圆心形成一个扇形。

  • paint:用于指定绘制效果的画笔。

示例:

Paint paint = new Paint();
paint.setColor(Color.GREEN);
RectF oval = new RectF(100, 100, 300, 300);
canvas.drawArc(oval, 45, 90, true, paint);

2.drawOval`

功能: 在画布上绘制一个椭圆。

原型:

public void drawOval(RectF oval, Paint paint)

参数:

  • oval:包围椭圆的矩形。

  • paint:用于指定绘制效果的画笔。

示例:

Paint paint = new Paint();
paint.setColor(Color.BLUE);
RectF oval = new RectF(100, 100, 300, 200);
canvas.drawOval(oval, paint);

四、裁剪

1.clipRect

功能:设置画布的裁剪区域为矩形。

原型:

public boolean clipRect(Rect rect)

参数:

  • rect:裁剪的矩形区域。

示例:

Rect rect = new Rect(50, 50, 200, 200);
canvas.clipRect(rect);

2.clipPath

功能:设置画布的裁剪区域为路径。

原型:

public boolean clipPath(Path path)

参数:

  • path:裁剪的路径。

示例:

Path path = new Path();
// 添加路径操作,例如 moveTo、lineTo
canvas.clipPath(path);

五、几何变换

1.translate

功能:平移画布。

原型:

public void translate(float dx, float dy)

参数:

  • dx:水平方向上的平移距离。

  • dy:垂直方向上的平移距离。

示例:

canvas.translate(100, 50);  // 将画布在水平方向上平移 100,垂直方向上平移 50

2.scale

功能: 缩放画布。

原型:

public void scale(float sx, float sy)

参数:

  • sx:水平方向上的缩放比例。

  • sy:垂直方向上的缩放比例。

示例:

canvas.scale(1.5f, 2.0f);  // 将画布在水平方向上放大 1.5 倍,垂直方向上放大 2 倍

3.rotate

功能: 旋转画布。

原型:

public void rotate(float degrees)

参数:

  • degrees:旋转的角度。

示例:

canvas.rotate(45);  // 将画布顺时针旋转 45 度

4.skew

功能 斜切(错切)画布。

原型:

void skew(float sx, float sy)

参数解释:

  • sx:水平方向上的错切因子。
  • sy:垂直方向上的错切因子。

示例:

canvas.skew(0.2f, 0);  // 在水平方向上进行横向错切

5.concat

功能: 使用矩阵进行多种变换。

原型:

void concat(Matrix matrix)

参数解释:

  • matrix:变换矩阵。

示例:

Matrix matrix = new Matrix();
matrix.postTranslate(100, 50);  // 平移
matrix.postRotate(45);  // 旋转
canvas.concat(matrix);  // 应用变换矩阵

六、保存和恢复画布

1.save()和restore()

功能: 保存和恢复画布的状态,包括平移、缩放、旋转等变换。

原型:

int save()
void restore()

无参数。

示例:

int saveCount = canvas.save();  // 保存当前画布状态
// 在这里进行绘制和变换操作
canvas.restoreToCount(saveCount);  // 恢复到保存的画布状态

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/307459.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

方案:智能分析网关V4区域人数超员AI算法模型的应用场景介绍

视频AI智能分析技术已经深入到人类生活的各个角落,与社会发展的方方面面紧密相连。从日常生活中的各种场景,如人脸识别、车牌识别,到工业生产中的安全监控,如工厂园区的翻越围栏识别、入侵识别、工地的安全帽识别、车间流水线产品…

一篇文章掌握 NestJS 所有的生命周期以及生命周期的执行时机

前言 NestJS 是一个用于构建高效、可扩展的 Node.js 服务器端应用程序的框架,它使用 TypeScript 作为开发语言,也支持原生的 JavaScript。在 NestJS 中,生命周期事件是一个重要的概念。在我们构建和管理应用程序时,有时需要在特定…

【数据结构】C语言实现双链表的基本操作

双链表及其基本操作的实现 导言一、单链表与双链表二、双链表类型的创建三、双链表的初始化四、双链表的创建五、双链表的遍历六、双链表的查找七、双链表的插入八、双链表的删除结语 导言 大家好,很高兴又和大家见面啦!!! 经过…

全方面了解vcruntime140_1.dll的解决方法,多种vcruntime140_1.dll丢失的方法

在日常使用电脑时,我们常常遇到各种各样的问题。其中之一就是丢失vcruntime140_1.dll文件,这是一个重要的系统文件,会影响到电脑的正常运行。今天小编就来给大家详细的说说这一方面的咨询,教会大家多种的丢失vcruntime140_1.dll的…

文件销毁 硬盘销毁 数据销毁:护航数据安全的最后一公里

希望与业界各位志同道合的伙伴交流切磋最新的网络、服务器行业动态信息,同时分享腾讯在网络与服务器领域,规划、运营、研发、服务等层面的实战干货,期待与您的共同成长。 网络平台部以构建敏捷、弹性、低成本的业界领先海量互联网云计算服务…

PBR纹理贴图类型详解

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 PBR 纹理是一种帮助 3D 艺术家使他们的 3D 渲染看起来更逼真的技术。…

Live800:客服售前、售中,售后需要做哪些服务?有哪些区别?

客服在售前、售中和售后阶段扮演着重要的角色,他们为顾客提供全方位的服务,确保顾客的满意度和忠诚度。尽管这三个阶段都涉及到与顾客的互动,但每个阶段的服务内容和重点有所不同。 在售前阶段,客服的主要任务是提供产品或服务的信…

腾讯云服务器买1年送3个月,怎么送?免费吗?

腾讯云服务器买1年送3个月怎么送?在买赠活动页面 https://curl.qcloud.com/oRMoSucP 打开后,腾讯云百科以2核4G5M轻量应用服务器为例,点击立即购买,然后在“赠送福利”中选择“免费赠送时长”或“免费再领一台2核4G5M轻量”&#…

循环冗余效验码的计算方法

循环冗余效验码的计算方法 G(x): 在了解计算方法之前我们首先要明白G(x)表明的意思,这一步非常重要! 例如,G(x) x^3 x^2 1 ,该式子表明的编…

Oracle 19c OCP 1z0 082考场真题解析第17题

考试科目:1Z0-082 考试题量:90 通过分数:60% 考试时间:150min 本文为云贝教育郭一军guoyJoe原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 17. Which three …

算法设计与分析实验报告-贪心算法

校课程的简单实验报告。 算法设计与分析实验报告-递归与分治策略 算法设计与分析实验报告-动态规划算法 算法设计与分析实验报告-贪心算法 dijkstra迪杰斯特拉算法(邻接表法) 算法设计与分析实验报告-回溯法 算法设计与分析实验报告-分支限界法 …

如何本地搭建FastDFS文件服务器并实现远程访问【内网穿透】

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…