自定义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);  // 恢复到保存的画布状态

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Gitlab 定时备份

要求 1.为了能够备份和恢复,请确保你的系统上安装了Rsync #Debian/Ubauntu sudo apt-get install rsync # RHEL/Centos sudo yum install rsync 配置与备份目标机器之间的免密认证 修改gitlab配置文件 vim /etc/gitlab/gitlab.rb gitlab_rails[manage_backup_…

服务器运行状况监控工具

服务器运行状况监视提供了每个服务器状态和性能的广泛概述,通过监控服务器指标,如 CPU 使用率、内存消耗、I/O、磁盘使用率、进程等,服务器运行状况监控可以避免服务器停机。 服务器性能监控指标 服务器是网络中最重要的组件之一&#xff0…

AI大模型时代下运维开发探索第二篇:基于大模型(LLM)的数据仓库

在SREWorks社区聚集了很多进行运维数仓建设的同学,大家都会遇到类似的挑战和问题: 数仓中存储大量数据消耗成本,但很多存储的数据却并没有消费。进数仓的ETL学习成本高、管理成本高,相关同学配合度低,以及上游结构改动…

OpenAPI,已支持表单数据格式校验

OpenAPI 路径 开放平台 功能简介 「OpenAPI」- 支持表单数据格式校验。 通过「OpenAPI-新增表单数据」接口,新增数据时,若数据格式不匹配,会导致无法新增。 例如,数字不能新增到日期格式的表单字段。 请参考数据格式传参&a…

3d光学轮廓仪测微光学器件应用及其重要意义

微光学器件是光学器件的重要分支,为光学通信、光传感、光计算等领域的发展提供重要支撑。微光学器件具有尺寸小、功耗低、低成本等优势,可以于电子器件集成,实现更高效的数据传输和信号处理。未来,随着微纳加工技术的进一步发展&a…

【办公软件】Excel双坐标轴图表

在工作中整理测试数据,往往需要一个图表展示两个差异较大的指标。比如共有三个数据,其中两个是要进行对比的温度值,另一个指标是两个温度的差值,这个差值可能很小。 举个实际的例子:数据如下所示,NTC检测温…

在STM32中集成TSL2561光强传感器的开发和调试

在STM32中集成TSL2561光强传感器的开发和调试是一个常见的应用场景。TSL2561是一款数字光传感器,能够测量可见光和红外光的光强,并通过I2C接口将数据传输给微控制器。下面将为您介绍在STM32中集成TSL2561传感器的开发步骤,并附上相应的代码示…

【Linux】指令(本人使用比较少的)——笔记(持续更新)

文章目录 ps -axj:查看进程ps -aL:查看线程echo $?:查看最近程序的退出码jobs:查看后台运行的线程组fd 任务号:将后台任务提到前台bg 任务号:将暂停的后台程序重启netstat -nltp:查看服务及监听…

关于 K8s 的一些基础概念整理

〇、前言 Kubernetes,将中间八个字母用数字 8 替换掉简称 k8s,是一个开源的容器集群管理系统,由谷歌开发并维护。它为跨主机的容器化应用提供资源调度、服务发现、高可用管理和弹性伸缩等功能。 下面简单列一下 k8s 的几个特性: 自…

React Hooks 面试题 | 06.精选React Hooks面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

02.Git远程仓库

一、常用的托管服务 1.gitHub 一个面向开源及私有软件项目的托管平台,只支持Git作为唯一的版本库格式进行托管。 2.码云(gitee) 是国内的一个代码托管平台,服务器在国内,所有相较于gitHub使用起来更加方便一点。 3.gitLab 是一个用于仓库管…

【JS笔记】JavaScript语法 《基础+重点》 知识内容,快速上手(二)

数组 什么是数组? 字面理解就是 数字的组合 其实不太准确,准确的来说数组是一个 数据的集合 也就是我们把一些数据放在一个盒子里面,按照顺序排好 [1, 2, 3, hello, true, false]这个东西就是一个数组,存储着一些数据的集合 …

解决VNC连接Ubuntu服务器打开终端出现闪退情况

服务器环境 阿里云ECS服务器 操作系统:Ubuntu 20.0.4 如何使用VNC连接阿里云ECS服务器 1.阿里云官方指导:通过VNC搭建Ubuntu 18.04和20.04图形界面 2.新手入门ECS——ubuntu 20.04安装图形化界面和本地VNC连接 问题描述 使用VNC连接上新申请阿里云服…

《HelloGitHub》第 93 期

兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 Python、Java、Go、C/C、Swift...让你在短时间内…

OfficeWeb365 Indexs 任意文件读取漏洞复现

0x01 产品简介 OfficeWeb365 是专注于 Office 文档在线预览及PDF文档在线预览云服务,包括 Microsoft Word 文档在线预览、Excel 表格在线预览、Powerpoint 演示文档在线预览,WPS 文字处理、WPS 表格、WPS 演示及 Adobe PDF 文档在线预览。 0x02 漏洞概述 OfficeWeb365 /Pi…

广播信道的局域网

目录 一. 局域网的数据链路层二. 广播信道局域网三. 以太网标准四. CSMA/CD协议五. 以太网最短的帧六. 冲突解决方法-―退避算法 \quad 一. 局域网的数据链路层 \quad 局域网的特点 \quad 局域网的拓扑结构 \quad 局域网传输媒体 \quad \quad 媒体共享技术 \quad 二. 广播信道…

SpringBoot 实现Execl 导入导出

1、引包 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.0.3</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easy…

Python之自然语言处理库snowNLP

一、介绍 SnowNLP是一个python写的类库&#xff0c;可以方便的处理中文文本内容&#xff0c;是受到了TextBlob的启发而写的&#xff0c;由于现在大部分的自然语言处理库基本都是针对英文的&#xff0c;于是写了一个方便处理中文的类库&#xff0c;并且和TextBlob不同的是&…

Hbase详解

Hbase 概念 base 是分布式、面向列的开源数据库&#xff08;其实准确的说是面向列族&#xff09;。HDFS 为 Hbase 提供可靠的底层数据存储服务&#xff0c;MapReduce 为 Hbase 提供高性能的计算能力&#xff0c;Zookeeper 为 Hbase 提供稳定服务和 Failover 机制&#xff0c;…

帆软FineBi V6版本经验总结

帆软FineBi V6版本经验总结 BI分析出现背景 ​ 现在是一个大数据的时代&#xff0c;每时每刻都有海量的明细数据出现。这时大数据时代用户思维是&#xff1a;1、数据的爆炸式增长&#xff0c;人们比起明细数据&#xff0c;更在意样本的整体特征、相互关系。2、基于明细的“小…