Android Canvas

一、Canvas介绍

Canvas(画布):Canvas是Android提供的一个2D绘图API,它允许我们在屏幕上绘制图形、文字、图像等。通过Canvas,我们可以实现自定义的UI界面,绘制各种形状、颜色和纹理等。Canvas提供了一系列的绘制方法,如绘制线条、矩形、圆形、椭圆等,还可以进行图像的平移、旋转、缩放等操作。

Canvas 支持“绘制”调用,想要进行绘制,你需要4个基本组成:一个由像素构成的位图,支持绘制调用的画布(绘制位图),一个图元(如矩形,路径,文本,位图),和油漆(用于绘制图的颜色和样式)。而我们最常用的就是在一个View上画一些图片,形状或者自定义的文本内容,这里我们都是使用Canvas来实现的!你可以获取View中的Canvas 对象,在onDraw(Canvas canvas) 提供了canvas 对象。

我们可以把这个Canvas理解成系统提供给我们的一块内存区域(但实际上它只是一套画图的API,真正的内存是下面的Bitmap),而且它还提供了一整套对这个内存区域进行操作的方法,所有的这些操作都是画图API。也就是说在这种方式下我们已经能一笔一划或者使用Graphic来画我们所需要的东西了,要画什么要显示什么都由我们自己控制。

这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。前面一种适合处理量比较小,帧率比较小的动画,比如说象棋游戏之类的;而后一种主要用在游戏,高品质动画方面的画图。

Android中的Drawable和Canvas是用于绘制图形和图像的两个重要概念,我们容易对它们进行混淆:

Drawable是一个可绘制的对象,它可以是一个图形、一个位图或者是一个颜色。Drawable可以用来绘制在View上,它可以是背景、前景或者是View的内容,Drawable具有位置和大小、透明度等,Drawable的位置及大小也会收到它的承载器,如:View的影响。

Canvas是一个绘图的画布,它提供了一系列的绘制方法,可以在其上绘制各种图形、文本和位图。通过Canvas,我们可以实现自定义的绘图效果。Drawable中包含Canvas。可以通过将Canvas作为参数传递给Drawable的draw方法,将Drawable绘制到Canvas上。

二、Canvas相关类

JAVA类

BaseCanvas

此类是 Canvas 绘图操作的基类。

BaseCanvas 文件路径:

frameworks/base/graphics/java/android/graphic/BaseCanvas.java

BaseCanvas 定义:

public abstract class BaseCanvas {}

Canvas

Android中的Canvas是一个用于绘制图形和文本的2D画布。它提供了一系列的绘制方法,可以在View上绘制各种形状、图像和文本。

Canvas文件路径:

frameworks/base/graphics/java/android/graphic/Canvas.java

Canvas定义:

public class Canvas extends BaseCanvas {}

下面是Canvas类常用的方法:

Canvas():构建一个空的栅格画布。
Canvas(Bitmap bitmap):构造一个具有指定位图的画布进行绘制。
boolean clipPath(Path path, Region.Op op):使用指定的路径修改当前剪辑。
boolean clipPath(Path path):将当前剪辑与指定路径相交。
boolean clipRect(float left, float top, float right, float bottom, Region.Op op):使用指定的矩形修改当前剪辑,该矩形以局部坐标表示。
boolean clipRect(RectF rect):将当前剪辑与指定的矩形相交,该矩形以局部坐标表示。
boolean clipRect(Rect rect, Region.Op op):使用指定的矩形修改当前剪辑,该矩形以局部坐标表示。
boolean clipRect(int left, int top, int right, int bottom):将当前剪辑与指定的矩形相交,该矩形以局部坐标表示。
boolean clipRect(float left, float top, float right, float bottom):将当前剪辑与指定的矩形相交,该矩形以局部坐标表示。
boolean clipRect(RectF rect, Region.O
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值