Cancvas
来源:互联网 发布:csol2优化 编辑:程序博客网 时间:2024/06/05 02:43
- 设计
- 开发
- 分发
帆布
public class Canvas
extends Object
Canvas类保存“draw”调用。要画一些东西,你需要4个基本组件:一个位图来保存像素,一个Canvas来主持绘图调用(写入位图),一个绘图原语(如Rect,Path,text,Bitmap)和一个绘图(描述绘图的颜色和样式)。
开发者指南
有关如何使用Canvas的更多信息,请阅读 Canvas和Drawables开发人员指南。
概要
嵌套类
enum
Canvas.EdgeType
用作quickReject()
调用参数的常数值。
enum
Canvas.VertexMode
常量
int
ALL_SAVE_FLAG
restore()被调用时恢复所有内容(标准保存标志)。
int
CLIP_SAVE_FLAG
这个常量是在API级别26.使用过时的无支撑的版本save()
,saveLayer(RectF, Paint)
或 saveLayerAlpha(RectF, int)
。对于saveLayer()调用,剪辑总是针对Hardware accelerated
画布进行还原,以及作为Build.VERSION_CODES.O
所有画布类型的默认行为的API级别。
int
CLIP_TO_LAYER_SAVE_FLAG
该常数在API级别26中被废弃。该标志导致性能差,并且使用不同剪辑的单层或多个绘图命令可以实现相同的效果。
int
FULL_COLOR_LAYER_SAVE_FLAG
此常数在API级别26中已被弃用。此标志被忽略。使用无旗版本saveLayer(RectF, Paint)
saveLayerAlpha(RectF, int)
。
int
HAS_ALPHA_LAYER_SAVE_FLAG
此常数在API级别26中已被弃用。此标志被忽略。使用无旗版本saveLayer(RectF, Paint)
saveLayerAlpha(RectF, int)
。
int
MATRIX_SAVE_FLAG
这个常量是在API级别26.使用过时的无支撑的版本save()
,saveLayer(RectF, Paint)
或 saveLayerAlpha(RectF, int)
。对于saveLayer()调用,矩阵总是针对Hardware accelerated
画布进行还原,以及作为Build.VERSION_CODES.O
所有画布类型的默认行为的API级别。
字段
protected int
mDensity
protected long
mNativeCanvasWrapper
应该只在构造函数中分配(或者如果软件画布是setBitmap),则可以通过NativeAllocation释放。
protected int
mScreenDensity
用于确定何时兼容性缩放有效。
公共建设者
Canvas()
构造一个空的光栅画布。
Canvas(Bitmap bitmap)
构造一个带有指定位图绘制的画布。
公共方法
boolean
clipOutPath(Path path)
将剪辑设置为当前剪辑和指定路径的差异。
boolean
clipOutRect(int left, int top, int right, int bottom)
将剪辑设置为当前剪辑和指定矩形的差异,以局部坐标表示。
boolean
clipOutRect(Rect rect)
将剪辑设置为当前剪辑和指定矩形的差异,以局部坐标表示。
boolean
clipOutRect(float left, float top, float right, float bottom)
将剪辑设置为当前剪辑和指定矩形的差异,以局部坐标表示。
boolean
clipOutRect(RectF rect)
将剪辑设置为当前剪辑和指定矩形的差异,以局部坐标表示。
boolean
clipPath(Path path, Region.Op op)
这种方法比其它API级26 Region.Op值弃用INTERSECT
并 DIFFERENCE
具有扩大夹的能力。画布剪切API旨在仅由于还原操作展开剪辑。这使得视图父对象可以剪辑画布,以便清楚地定义其子项的最大绘图区域。推荐的替代电话是clipPath(Path)
和 clipOutPath(Path)
;
boolean
clipPath(Path path)
用指定的路径相交当前的剪辑。
boolean
clipRect(float left, float top, float right, float bottom, Region.Op op)
这种方法比其它API级26 Region.Op值弃用INTERSECT
并 DIFFERENCE
具有扩大夹的能力。画布剪切API旨在仅由于还原操作展开剪辑。这使得视图父对象可以剪辑画布,以便清楚地定义其子项的最大绘图区域。推荐的替代电话是clipRect(float, float, float, float)
和 clipOutRect(float, float, float, float)
;
boolean
clipRect(RectF rect)
用指定的矩形相交当前的剪辑,以局部坐标表示。
boolean
clipRect(Rect rect)
用指定的矩形相交当前的剪辑,以局部坐标表示。
boolean
clipRect(Rect rect, Region.Op op)
这种方法比其它API级26 Region.Op值弃用INTERSECT
并 DIFFERENCE
具有扩大夹的能力。画布剪切API旨在仅由于还原操作展开剪辑。这使得视图父对象可以剪辑画布,以便清楚地定义其子项的最大绘图区域。推荐的替代电话是clipRect(Rect)
和clipOutRect(Rect)
;
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.Op op)
这种方法比其它API级26 Region.Op值弃用INTERSECT
并 DIFFERENCE
具有扩大夹的能力。画布剪切API旨在仅由于还原操作展开剪辑。这使得视图父对象可以剪辑画布,以便清楚地定义其子项的最大绘图区域。推荐的替代电话是clipRect(RectF)
和clipOutRect(RectF)
;
void
concat(Matrix matrix)
用指定的矩阵预先计算当前矩阵。
void
drawARGB(int a, int r, int g, int b)
使用srcover porterduff模式,使用指定的ARGB颜色填充整个画布的位图(仅限于当前的剪辑)。
void
drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter,Paint paint)
绘制指定的弧,其将被缩放以适合指定的椭圆。
void
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
绘制指定的弧,其将被缩放以适合指定的椭圆。
void
drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
使用指定的矩阵绘制位图。
void
drawBitmap(int[] colors, int offset, int stride, float x, float y, int width, int height, boolean hasAlpha, Paintpaint)
在API级别21中不建议使用hardware accelerated
此方法。每次调用此方法时,画布的用法都需要内部的颜色缓冲区内容副本。使用位图可避免此复制,并允许应用程序更明确地控制像素数据的生命周期和副本。
void
drawBitmap(int[] colors, int offset, int stride, int x, int y, int width, int height, boolean hasAlpha, Paintpaint)
在API级别21中不建议使用hardware accelerated
此方法。每次调用此方法时,画布的用法都需要内部的颜色缓冲区内容副本。使用位图可避免此复制,并允许应用程序更明确地控制像素数据的生命周期和副本。
void
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
绘制指定的位图,自动缩放/翻译以填充目标矩形。
void
drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
绘制指定的位图,自动缩放/翻译以填充目标矩形。
void
drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
使用由当前矩阵转换的指定绘制,绘制指定的位图,其顶部/左侧角(x,y)。
void
drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)
通过网格绘制位图,网格顶点均匀分布在位图中。
void
drawCircle(float cx, float cy, float radius, Paint paint)
使用指定的油漆绘制指定的圆。
void
drawColor(int color)
使用srcover porterduff模式,使用指定的颜色填充整个画布的位图(仅限于当前的剪辑)。
void
drawColor(int color, PorterDuff.Mode mode)
使用指定的颜色和porter-duff xfermode填充整个画布的位图(限于当前的剪辑)。
void
drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
使用指定的绘制绘制一个具有指定开始和停止x,y坐标的线段。
void
drawLines(float[] pts, int offset, int count, Paint paint)
画一系列线。
void
drawLines(float[] pts, Paint paint)
void
drawOval(float left, float top, float right, float bottom, Paint paint)
使用指定的油漆绘制指定的椭圆。
void
drawOval(RectF oval, Paint paint)
使用指定的油漆绘制指定的椭圆。
void
drawPaint(Paint paint)
使用指定的颜色填充整个画布的位图(仅限于当前的剪辑)。
void
drawPatch(NinePatch patch, RectF dst, Paint paint)
void
drawPatch(NinePatch patch, Rect dst, Paint paint)
void
drawPath(Path path, Paint paint)
使用指定的颜色绘制指定的路径。
void
drawPicture(Picture picture, RectF dst)
绘制图片,拉伸以适应第d个矩形。
void
drawPicture(Picture picture)
保存画布状态,绘制图片,并恢复画布状态。
void
drawPicture(Picture picture, Rect dst)
绘制图片,拉伸以适应第d个矩形。
void
drawPoint(float x, float y, Paint paint)
drawPoints()用于绘制单个点。
void
drawPoints(float[] pts, Paint paint)
drawPoints()的助手,假定您要绘制整个数组
void
drawPoints(float[] pts, int offset, int count, Paint paint)
画一系列点。
void
drawPosText(String text, float[] pos, Paint paint)
此方法在API级别16中已弃用。此方法不支持字形组合和分解,因此不应用于复制脚本。它也不处理补充字符(例如表情符号)。
void
drawPosText(char[] text, int index, int count, float[] pos, Paint paint)
此方法在API级别16中已弃用。此方法不支持字形组合和分解,因此不应用于复制脚本。它也不处理补充字符(例如表情符号)。
void
drawRGB(int r, int g, int b)
使用srcover porterduff模式,使用指定的RGB颜色填充整个画布的位图(仅限于当前的剪辑)。
void
drawRect(float left, float top, float right, float bottom, Paint paint)
使用指定的绘图绘制指定的Rect。
void
drawRect(Rect r, Paint paint)
使用指定的绘图绘制指定的Rect。
void
drawRect(RectF rect, Paint paint)
使用指定的绘图绘制指定的Rect。
void
drawRoundRect(RectF rect, float rx, float ry, Paint paint)
使用指定的油漆绘制指定的圆弧。
void
drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint)
使用指定的油漆绘制指定的圆弧。
void
drawText(CharSequence text, int start, int end, float x, float y, Paint paint)
绘制指定范围的文本,由起始/终止指定,其起始位于(x,y),在指定的“绘画”中。
void
drawText(String text, float x, float y, Paint paint)
使用指定的油漆绘制文本,原点为(x,y)。
void
drawText(char[] text, int index, int count, float x, float y, Paint paint)
使用指定的油漆绘制文本,原点为(x,y)。
void
drawText(String text, int start, int end, float x, float y, Paint paint)
使用指定的油漆绘制文本,原点为(x,y)。
void
drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
沿着指定的路径使用指定的油漆绘制原点(x,y)的文本。
void
drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)
沿着指定的路径使用指定的油漆绘制原点(x,y)的文本。
void
drawTextRun(char[] text, int index, int count, int contextIndex, int contextCount, float x, float y, boolean isRtl, Paint paint)
在一个方向上绘制一行文本,具有复杂文本整形的可选上下文。
void
drawTextRun(CharSequence text, int start, int end, int contextStart, int contextEnd, float x, float y, boolean isRtl, Paint paint)
在一个方向上绘制一行文本,具有复杂文本整形的可选上下文。
void
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)
绘制顶点数组,解释为三角形(基于模式)。
boolean
getClipBounds(Rect bounds)
返回bounds参数中当前剪辑的边界(在局部坐标中),如果非空,则返回true。
final Rect
getClipBounds()
检索当前剪辑的边界(在本地坐标中)。
int
getDensity()
返回画布的目标密度。
DrawFilter
getDrawFilter()
int
getHeight()
返回当前绘图层的高度
void
getMatrix(Matrix ctm)
这种方法在API级别16中已被弃用。 Hardware accelerated
当传递给View或Drawable时,画布可能具有任何矩阵,因为它是在层次结构中定义的实现方式,因此可以创建这样的画布。在这种情况下,推荐在不考虑当前矩阵的情况下绘制内容,或者跟踪画布外的相关变换状态。
finalMatrix
getMatrix()
这种方法在API级别16中已被弃用。 Hardware accelerated
当传递给View或Drawable时,画布可能具有任何矩阵,因为它是在层次结构中定义的实现方式,因此可以创建这样的画布。在这种情况下,推荐在不考虑当前矩阵的情况下绘制内容,或者跟踪画布外的相关变换状态。
int
getMaximumBitmapHeight()
返回使用此画布绘制的位图的最大允许高度。
int
getMaximumBitmapWidth()
返回使用此画布绘制的位图的最大允许宽度。
int
getSaveCount()
返回Canvas私有堆栈上矩阵/剪辑状态的数量。
int
getWidth()
返回当前绘图层的宽度
boolean
isHardwareAccelerated()
指示此Canvas是否使用硬件加速。
boolean
isOpaque()
如果当前层吸收的设备是不透明的(即,
boolean
quickReject(float left, float top, float right, float bottom, Canvas.EdgeType type)
如果指定的矩形在被当前矩阵变换之后将完全位于当前剪辑之外,则返回true。
boolean
quickReject(RectF rect, Canvas.EdgeType type)
如果指定的矩形在被当前矩阵变换之后将完全位于当前剪辑之外,则返回true。
boolean
quickReject(Path path, Canvas.EdgeType type)
如果指定的路径被当前矩阵转换后将完全位于当前剪辑之外,则返回true。
void
restore()
此调用平衡先前对save()的调用,并用于从上次保存调用后删除对矩阵/片段状态的所有修改。
void
restoreToCount(int saveCount)
高效的方式弹出保存计数之后发生的save()的所有调用到达saveCount。
void
rotate(float degrees)
用指定的旋转预先计算当前矩阵。
final void
rotate(float degrees, float px, float py)
用指定的旋转预先计算当前矩阵。
int
save(int saveFlags)
这个方法在API级别26中被废弃了save()
。
int
save()
将当前矩阵和剪辑保存到专用堆栈上。
int
saveLayer(RectF bounds, Paint paint, int saveFlags)
这个方法在API级别26中被废弃了saveLayer(RectF, Paint)
。
int
saveLayer(RectF bounds, Paint paint)
这与save()的行为相同,但是它还将绘图分配并重定向到屏幕外渲染目标。
int
saveLayer(float left, float top, float right, float bottom, Paint paint)
方便的saveLayer(RectF, Paint)
是采用边界矩形的四个浮点坐标。
int
saveLayer(float left, float top, float right, float bottom, Paint paint, int saveFlags)
这个方法在API级别26中被废弃了saveLayer(float, float, float, float, Paint)
。
int
saveLayerAlpha(float left, float top, float right, float bottom, int alpha, int saveFlags)
这个方法在API级别26中被废弃了saveLayerAlpha(float, float, float, float, int)
。
int
saveLayerAlpha(RectF bounds, int alpha)
方便saveLayer(RectF, Paint)
而不是使用整个Paint对象,它只需要alpha
参数。
int
saveLayerAlpha(RectF bounds, int alpha, int saveFlags)
这个方法在API级别26中被废弃了saveLayerAlpha(RectF, int)
。
int
saveLayerAlpha(float left, float top, float right, float bottom, int alpha)
方便的saveLayerAlpha(RectF, int)
是采用边界矩形的四个浮点坐标。
final void
scale(float sx, float sy, float px, float py)
以指定的比例预先计算当前矩阵。
void
scale(float sx, float sy)
以指定的比例预先计算当前矩阵。
void
setBitmap(Bitmap bitmap)
指定要绘制的画布的位图。
void
setDensity(int density)
指定此Canvas的支持位图的密度。
void
setDrawFilter(DrawFilter filter)
void
setMatrix(Matrix matrix)
用指定的矩阵完全替换当前矩阵。
void
skew(float sx, float sy)
以指定的偏移量预先计算当前矩阵。
void
translate(float dx, float dy)
用指定的转换预先计算当前矩阵
受保护的方法
static final void
checkRange(int length, int offset, int count)
void
throwIfCannotDraw(Bitmap bitmap)
继承方法
java.lang.Object
常量
ALL_SAVE_FLAG
int ALL_SAVE_FLAG
restore()被调用时恢复所有内容(标准保存标志)。
注意:出于性能原因,强烈建议将这个完整的标志传递给任何调用saveLayer()
和saveLayerAlpha()
变体。
注意:接受此标志的所有方法都具有等同于传递此标志的无标记版本。
常数值:31(0x0000001f)
CLIP_SAVE_FLAG
int CLIP_SAVE_FLAG
这个常量是在API级别26.不赞成
使用的无支撑的版本save()
,saveLayer(RectF, Paint)
或 saveLayerAlpha(RectF, int)
。对于saveLayer()调用,剪辑总是针对Hardware accelerated
画布进行还原,以及作为Build.VERSION_CODES.O
所有画布类型的默认行为的API级别。
在restore()被调用时还原当前的剪辑。
常数值:2(0x00000002)
CLIP_TO_LAYER_SAVE_FLAG
int CLIP_TO_LAYER_SAVE_FLAG
该常数在API级别26中被废弃。
该标志导致性能差,并且使用不同剪辑的单层或多个绘图命令可以实现相同的效果。
剪贴画到屏幕外层的边界,省略你自己的危险。
注意:强烈建议不要为任何调用saveLayer()
和 saveLayerAlpha()
变体省略此标志。不通过这个标志通常会引发硬件加速渲染的性能极差。
常数值:16(0x00000010)
FULL_COLOR_LAYER_SAVE_FLAG
int FULL_COLOR_LAYER_SAVE_FLAG
此常数在API级别26中已被弃用。
此标志被忽略。使用无旗版本saveLayer(RectF, Paint)
saveLayerAlpha(RectF, int)
。
该层需要每个颜色通道的完全8位精度。
常数值:8(0x00000008)
HAS_ALPHA_LAYER_SAVE_FLAG
int HAS_ALPHA_LAYER_SAVE_FLAG
此常数在API级别26中已被弃用。
此标志被忽略。使用无旗版本saveLayer(RectF, Paint)
saveLayerAlpha(RectF, int)
。
该层需要每像素Alpha通道。
常数值:4(0x00000004)
MATRIX_SAVE_FLAG
int MATRIX_SAVE_FLAG
这个常量是在API级别26.不赞成
使用的无支撑的版本save()
,saveLayer(RectF, Paint)
或 saveLayerAlpha(RectF, int)
。对于saveLayer()调用,矩阵总是针对Hardware accelerated
画布进行还原,以及作为Build.VERSION_CODES.O
所有画布类型的默认行为的API级别。
在restore()被调用时还原当前矩阵。
常数值:1(0x00000001)
字段
mDensity
int mDensity
mNativeCanvasWrapper
长mNativeCanvasWrapper
应该只在构造函数中分配(或者如果软件画布是setBitmap),则可以通过NativeAllocation释放。
mScreenDensity
int mScreenDensity
用于确定何时兼容性缩放有效。
公共建设者
帆布
画布()
构造一个空的光栅画布。使用setBitmap()指定要绘制的位图。最初的目标密度DENSITY_NONE
; 当为画布设置目标位图时,通常会被替换。
帆布
画布(位图位图)
构造一个带有指定位图绘制的画布。位图必须是可变的。
画布的初始目标密度与给定位图的密度相同。
bitmap
Bitmap
:指定要绘制的画布的可变位图。这个值永远不会null
。
公共方法
clipOutPath
boolean clipOutPath(路径路径)
将剪辑设置为当前剪辑和指定路径的差异。
path
Path
:差异操作中使用的路径这个值永远不会null
。
boolean
如果生成的剪辑不为空,则为trueclipOutRect
boolean clipOutRect(int left, int顶部, int对, int底部)
将剪辑设置为当前剪辑和指定矩形的差异,以局部坐标表示。
left
int
:在差异操作中使用的矩形的左侧top
int
:在差异操作中使用的矩形的顶部right
int
:在差异操作中使用的矩形右侧bottom
int
:在差异操作中使用矩形的底部boolean
如果生成的剪辑不为空,则为trueclipOutRect
boolean clipOutRect(Rect rect)
将剪辑设置为当前剪辑和指定矩形的差异,以局部坐标表示。
rect
Rect
:用当前剪辑执行差异的矩形。这个值永远不会null
。
boolean
如果生成的剪辑不为空,则为trueclipOutRect
boolean clipOutRect(float left, 浮动顶部, 浮动右 浮底)
将剪辑设置为当前剪辑和指定矩形的差异,以局部坐标表示。
left
float
:在差异操作中使用的矩形的左侧top
float
:在差异操作中使用的矩形的顶部right
float
:在差异操作中使用的矩形右侧bottom
float
:在差异操作中使用矩形的底部boolean
如果生成的剪辑不为空,则为trueclipOutRect
boolean clipOutRect(RectF rect)
将剪辑设置为当前剪辑和指定矩形的差异,以局部坐标表示。
rect
RectF
:用当前剪辑执行差异的矩形。这个值永远不会null
。
boolean
如果生成的剪辑不为空,则为trueclipPath
boolean clipPath(Path path, Region.Op op)
这种方法是在API级26弃用
比其他Region.Op值INTERSECT
和 DIFFERENCE
具有扩大夹的能力。画布剪切API旨在仅由于还原操作展开剪辑。这使得视图父对象可以剪辑画布,以便清楚地定义其子项的最大绘图区域。推荐的替代电话是clipPath(Path)
和 clipOutPath(Path)
;
使用指定的路径修改当前的剪辑。
path
Path
:在当前剪辑上操作的路径这个值永远不会null
。
op
Region.Op
:剪辑如何修改这个值永远不会null
。
boolean
如果结果为非空,则为trueclipPath
布尔clipPath(路径路径)
用指定的路径相交当前的剪辑。
path
Path
:与当前剪辑相交的路径这个值永远不会null
。
boolean
如果生成的剪辑不为空,则为trueclipRect
boolean clipRect(float left, 浮动顶部, 浮动右 浮底, 区域开放)
这种方法是在API级26弃用
比其他Region.Op值INTERSECT
和 DIFFERENCE
具有扩大夹的能力。画布剪切API旨在仅由于还原操作展开剪辑。这使得视图父对象可以剪辑画布,以便清楚地定义其子项的最大绘图区域。推荐的替代电话是clipRect(float, float, float, float)
和 clipOutRect(float, float, float, float)
;
使用指定的矩形修改当前的剪辑,以本地坐标表示。
left
float
:与当前剪辑相交的矩形左侧top
float
:与当前剪辑相交的矩形的顶部right
float
:与当前剪辑相交的矩形右侧bottom
float
:与当前剪辑相交的矩形的底部op
Region.Op
:剪辑如何修改这个值永远不会null
。
boolean
如果生成的剪辑不为空,则为trueclipRect
boolean clipRect(RectF rect)
用指定的矩形相交当前的剪辑,以局部坐标表示。
rect
RectF
:与当前剪辑相交的矩形。这个值永远不会null
。
boolean
如果生成的剪辑不为空,则为trueclipRect
boolean clipRect(Rect rect)
用指定的矩形相交当前的剪辑,以局部坐标表示。
rect
Rect
:与当前剪辑相交的矩形。这个值永远不会null
。
boolean
如果生成的剪辑不为空,则为trueclipRect
boolean clipRect(Rect rect, Region.Op op)
这种方法是在API级26弃用
比其他Region.Op值INTERSECT
和 DIFFERENCE
具有扩大夹的能力。画布剪切API旨在仅由于还原操作展开剪辑。这使得视图父对象可以剪辑画布,以便清楚地定义其子项的最大绘图区域。推荐的替代电话是clipRect(Rect)
和clipOutRect(Rect)
;
使用指定的矩形修改当前的剪辑,以本地坐标表示。
rect
Rect
:与当前剪辑相交的矩形。这个值永远不会null
。
op
Region.Op
:剪辑如何修改这个值永远不会null
。
boolean
如果生成的剪辑不为空,则为trueclipRect
boolean clipRect(int left, int顶部, int对, int底部)
用指定的矩形相交当前的剪辑,以局部坐标表示。
left
int
:与当前剪辑相交的矩形左侧top
int
:与当前剪辑相交的矩形的顶部right
int
:与当前剪辑相交的矩形右侧bottom
int
:与当前剪辑相交的矩形的底部boolean
如果生成的剪辑不为空,则为trueclipRect
boolean clipRect(float left, 浮动顶部, 浮动右 浮底)
用指定的矩形相交当前的剪辑,以局部坐标表示。
left
float
:与当前剪辑相交的矩形左侧top
float
:与当前剪辑相交的矩形的顶部right
float
:与当前剪辑相交的矩形右侧bottom
float
:与当前剪辑相交的矩形的底部boolean
如果生成的剪辑不为空,则为trueclipRect
boolean clipRect(RectF rect, Region.Op op)
这种方法是在API级26弃用
比其他Region.Op值INTERSECT
和 DIFFERENCE
具有扩大夹的能力。画布剪切API旨在仅由于还原操作展开剪辑。这使得视图父对象可以剪辑画布,以便清楚地定义其子项的最大绘图区域。推荐的替代电话是clipRect(RectF)
和clipOutRect(RectF)
;
使用指定的矩形修改当前的剪辑。
rect
RectF
:与当前剪辑相交的rect这个值永远不会null
。
op
Region.Op
:剪辑如何修改这个值永远不会null
。
boolean
如果生成的剪辑不为空,则为trueCONCAT
void concat(矩阵矩阵)
用指定的矩阵预先计算当前矩阵。如果指定的矩阵为空,则此方法不执行任何操作。
matrix
Matrix
:预先连接当前矩阵的矩阵该值可能是null
。
drawARGB
void drawARGB(int a, int r, int g, int b)
使用srcover porterduff模式,使用指定的ARGB颜色填充整个画布的位图(仅限于当前的剪辑)。
a
int
:绘制画布上颜色的alpha组件(0..255)r
int
:将颜色的红色成分(0..255)绘制到画布上g
int
:将绿色组件(0..255)的颜色绘制到画布上b
int
:蓝色组件(0..255)的颜色要画在画布上drawArc
void drawArc(float left, 浮动顶部, 浮动右 浮底, float startAngle, 浮动扫掠, 布尔使用中心, 油漆漆)
绘制指定的弧,其将被缩放以适合指定的椭圆。
如果起始角度为负或> = 360,起始角度被视为起始角度模数360。
如果扫掠角度> 360°,则椭圆形被完全绘制。请注意,这与SkPath :: arcTo略有不同,它将扫描角度视为360度。如果扫描角度为负,则扫描角度被视为360度扫描角度
弧线顺时针拉伸。0度的角度对应于0度(手表3点钟)的几何角度。
left
float
top
float
right
float
bottom
float
startAngle
float
:弧开始的起始角度(以度为单位)sweepAngle
float
:顺时针测量扫描角度(以度为单位)useCenter
boolean
:如果为真,请将椭圆的中心包含在圆弧中,如果正在抚摸,则关闭它。这将画一个楔子paint
Paint
:用来画弧的油漆这个值永远不会null
。
drawArc
void drawArc(RectF oval, float startAngle, 浮动扫掠, 布尔使用中心, 油漆漆)
绘制指定的弧,其将被缩放以适合指定的椭圆。
如果起始角度为负或> = 360,起始角度被视为起始角度模数360。
如果扫掠角度> 360°,则椭圆形被完全绘制。请注意,这与SkPath :: arcTo略有不同,它将扫描角度视为360度。如果扫描角度为负,则扫描角度被视为360度扫描角度
弧线顺时针拉伸。0度的角度对应于0度(手表3点钟)的几何角度。
oval
RectF
:用于定义圆弧形状和大小的椭圆形边界这个值永远不会null
。
startAngle
float
:弧开始的起始角度(以度为单位)sweepAngle
float
:顺时针测量扫描角度(以度为单位)useCenter
boolean
:如果为真,请将椭圆的中心包含在圆弧中,如果正在抚摸,则关闭它。这将画一个楔子paint
Paint
:用来画弧的油漆这个值永远不会null
。
drawBitmap
void drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
使用指定的矩阵绘制位图。
bitmap
Bitmap
:绘制位图这个值永远不会null
。
matrix
Matrix
:绘制时用于转换位图的矩阵这个值永远不会null
。
paint
Paint
:可能为null。油漆用来绘制位图drawBitmap
void drawBitmap(int [] colors, int offset, 大步走 浮动x, 浮动y, int width, int高度, 布尔hasAlpha, 油漆漆)
在API级别21中不建议
使用hardware accelerated
此方法。每次调用此方法时,画布的用法都需要内部的颜色缓冲区内容副本。使用位图可避免此复制,并允许应用程序更明确地控制像素数据的生命周期和副本。
将指定的颜色数组视为位图,并绘制它。这样做与第一次从数组中创建位图,然后绘制它相同的结果,但是这种方法避免了明确地创建一个位图对象,如果颜色经常变化可以更有效。
colors
int
:表示位图像素的颜色数组这个值永远不会null
。
offset
int
:偏移到第一个像素的数组的颜色stride
int
:行之间数组中的颜色数(必须> = width或<= -width)。x
float
:绘制位图的X坐标y
float
:绘制位图的Y坐标width
int
:位图的宽度height
int
:位图的高度hasAlpha
boolean
:如果颜色的alpha通道包含有效值,则为真。如果为false,则忽略Alpha字节(对于每个像素,假定为0xFF)。paint
Paint
:可能为null。油漆用来绘制位图drawBitmap
void drawBitmap(int [] colors, int offset, 大步走 int x, int和, int width, int高度, 布尔hasAlpha, 油漆漆)
在API级别21中不建议
使用hardware accelerated
此方法。每次调用此方法时,画布的用法都需要内部的颜色缓冲区内容副本。使用位图可避免此复制,并允许应用程序更明确地控制像素数据的生命周期和副本。
drawBitmap(int [] colors,...)的旧版本,它为x,y采用ints
colors
int
这个值永远不会null
。
offset
int
stride
int
x
int
y
int
width
int
height
int
hasAlpha
boolean
paint
Paint
该值可能是null
。
drawBitmap
void drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
绘制指定的位图,自动缩放/翻译以填充目标矩形。如果源矩形不为空,则它指定要绘制的位图的子集。
注意:如果paint包含一个maskfilter,它生成一个扩展到位图原始宽度/高度之外的掩码(例如BlurMaskFilter),那么位图将被绘制为具有CLAMP模式的着色器。因此,原始宽度/高度之外的颜色将被复制的边缘颜色。
此函数忽略与位图关联的密度。这是因为源和目标矩形坐标空间处于各自的密度,所以必须已经应用了适当的缩放因子。
bitmap
Bitmap
:要绘制的位图这个值永远不会null
。
src
Rect
:可能为null。要绘制的位图的子集dst
Rect
:位图将被缩放/翻译以适应的矩形这个值永远不会null
。
paint
Paint
:可能为null。油漆用来绘制位图drawBitmap
void drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
绘制指定的位图,自动缩放/翻译以填充目标矩形。如果源矩形不为空,则它指定要绘制的位图的子集。
注意:如果paint包含一个maskfilter,它生成一个扩展到位图原始宽度/高度之外的掩码(例如BlurMaskFilter),那么位图将被绘制为具有CLAMP模式的着色器。因此,原始宽度/高度之外的颜色将被复制的边缘颜色。
此函数忽略与位图关联的密度。这是因为源和目标矩形坐标空间处于各自的密度,所以必须已经应用了适当的缩放因子。
bitmap
Bitmap
:要绘制的位图这个值永远不会null
。
src
Rect
:可能为null。要绘制的位图的子集dst
RectF
:位图将被缩放/翻译以适应的矩形这个值永远不会null
。
paint
Paint
:可能为null。油漆用来绘制位图drawBitmap
void drawBitmap(Bitmap bitmap, 浮动左 浮动顶部, 油漆漆)
使用由当前矩阵转换的指定绘制,绘制指定的位图,其顶部/左侧角(x,y)。
注意:如果paint包含一个maskfilter,它生成一个扩展到位图原始宽度/高度之外的掩码(例如BlurMaskFilter),那么位图将被绘制为具有CLAMP模式的着色器。因此,原始宽度/高度之外的颜色将被复制的边缘颜色。
如果位图和画布具有不同的密度,则此功能将自动缩放位图,使其与画布的密度相同。
bitmap
Bitmap
:要绘制的位图这个值永远不会null
。
left
float
:绘制位图左侧的位置top
float
:正在绘制位图的顶端的位置paint
Paint
:用于绘制位图的绘图(可能为null)drawBitmapMesh
void drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float [] verts, int vertOffset, int []颜色, int colorOffset, 油漆漆)
通过网格绘制位图,网格顶点均匀分布在位图中。横向有meshWidth + 1个顶点,并且meshHeight + 1个顶点向下。以row-major顺序访问verts数组,使第一个meshWidth + 1个顶点从左到右分布在位图的顶部。此方法的更一般版本是drawVertices()。
bitmap
Bitmap
:使用网格绘制的位图这个值永远不会null
。
meshWidth
int
:网格中的列数。如果这是0,没有任何东西meshHeight
int
:网格中的行数。如果这是0,没有任何东西verts
float
:x,y对的数组,指定应绘制网格的位置。数组中必须至少有(meshWidth + 1)*(meshHeight + 1)* 2 + vertOffset值这个值永远不会null
。
vertOffset
int
:绘制之前要跳过的verts元素数colors
int
:可能为null。指定每个顶点处的颜色,该颜色在单元格之间插值,并将其值乘以相应的位图颜色。如果不为空,则数组中必须至少有(meshWidth + 1)*(meshHeight + 1)+ colorOffset值。colorOffset
int
:绘制前要跳过的颜色元素数paint
Paint
:可能为null。油漆用来绘制位图画圆
void drawCircle(float cx, 浮球, 浮动半径, 油漆漆)
使用指定的油漆绘制指定的圆。如果radius <= 0,则不会绘制任何内容。根据油漆中的样式,圆圈将被填充或框架。
cx
float
:要绘制的圆环的中心的x坐标cy
float
:要绘制的圆环的中心的y坐标radius
float
:要绘制的圆环的半径paint
Paint
画画用来画圆这个值永远不会null
。
drawColor
void drawColor(int color)
使用srcover porterduff模式,使用指定的颜色填充整个画布的位图(仅限于当前的剪辑)。
color
int
:画在画布上的颜色drawColor
void drawColor(int color, PorterDuff.Mode mode)
使用指定的颜色和porter-duff xfermode填充整个画布的位图(限于当前的剪辑)。
color
int
:画的颜色mode
PorterDuff.Mode
:搬运工模式适用于颜色这个值永远不会null
。
的drawLine
void drawLine(float startX, 浮动startY, 浮动挡X, 浮动stopY, 油漆漆)
使用指定的绘制绘制一个具有指定开始和停止x,y坐标的线段。
请注意,由于线条总是“框架”,所以在画面中忽略样式。
退化线(长度为0)不会绘制。
startX
float
:行的起始点的x坐标startY
float
:线的起点的y坐标stopX
float
stopY
float
paint
Paint
油漆用来画线这个值永远不会null
。
画线
void drawLines(float [] pts, int offset, int计数, 油漆漆)
画一系列线。每行都取自pts数组中的4个连续值。因此,绘制1行时,数组必须至少包含4个值。这在逻辑上与绘制数组相同:drawLine(pts [0],pts [1],pts [2],pts [3]),后跟drawLine(pts [4],pts [5],pts [ 6],pts [7])等。
pts
float
:绘制点阵数[x0 y0 x1 y1 x2 y2 ...]这个值永远不会null
。
offset
int
:绘制前要跳过的数组中的数值。count
int
:数组中要处理的值的数量,跳过“偏移量”之后。由于每行使用4个值,因此绘制的“行”数真的是(count >> 2)。paint
Paint
油漆用来画点这个值永远不会null
。
画线
void drawLines(float [] pts, Paint paint)
pts
float
这个值永远不会null
。
paint
Paint
这个值永远不会null
。
drawOval
void drawOval(float left, 浮动顶部, 浮动右 浮底, 油漆漆)
使用指定的油漆绘制指定的椭圆。椭圆形将根据油漆中的样式填充或框架。
left
float
top
float
right
float
bottom
float
paint
Paint
这个值永远不会null
。
drawOval
无效drawOval(RectF椭圆形, 油漆涂料)
使用指定的油漆绘制指定的椭圆。椭圆形将根据油漆中的样式填充或框架。
oval
RectF
:要绘制的椭圆的矩形边界这个值永远不会null
。
paint
Paint
这个值永远不会null
。
drawPaint
void drawPaint(油漆)
使用指定的颜色填充整个画布的位图(仅限于当前的剪辑)。使用指定的绘制绘制无限大的矩形,这是相当的(但更快)。
paint
Paint
:用来画在画布上的油漆这个值永远不会null
。
drawPatch
void drawPatch(NinePatch patch, RectF dst, Paint paint)
patch
NinePatch
这个值永远不会null
。
dst
RectF
这个值永远不会null
。
paint
Paint
该值可能是null
。
drawPatch
void drawPatch(NinePatch patch, Rect dst, Paint paint)
patch
NinePatch
这个值永远不会null
。
dst
Rect
这个值永远不会null
。
paint
Paint
该值可能是null
。
drawPath
void drawPath(Path path, Paint paint)
使用指定的颜色绘制指定的路径。该路径将根据油漆中的“样式”填充或框架。
path
Path
要绘制的路径这个值永远不会null
。
paint
Paint
:用来绘制路径的油漆这个值永远不会null
。
drawPicture
void drawPicture(Picture picture, RectF dst)
绘制图片,拉伸以适应第d个矩形。
picture
Picture
这个值永远不会null
。
dst
RectF
这个值永远不会null
。
drawPicture
void drawPicture(Picture picture)
保存画布状态,绘制图片,并恢复画布状态。这与picture.draw(canvas)不同,后者不执行任何保存/恢复。
注意:这将强制图片内部呼叫 endRecording()
,以准备播放。
picture
Picture
:要画的图片这个值永远不会null
。
drawPicture
void drawPicture(Picture picture, Rect dst)
绘制图片,拉伸以适应第d个矩形。
picture
Picture
这个值永远不会null
。
dst
Rect
这个值永远不会null
。
drawPoint
void drawPoint(float x, 浮动y, 油漆漆)
drawPoints()用于绘制单个点。
x
float
y
float
paint
Paint
这个值永远不会null
。
drawPoints
void drawPoints(float [] pts, Paint paint)
drawPoints()的助手,假定您要绘制整个数组
pts
float
这个值永远不会null
。
paint
Paint
这个值永远不会null
。
drawPoints
void drawPoints(float [] pts, int offset, int计数, 油漆漆)
画一系列点。每个点都位于由pts []指定的坐标上,其直径由油漆的笔画宽度(由画布“CTM”转换)指定,对于笔画宽度为0的特殊处理,它总是正好绘制1个像素或者如果启用抗锯齿,则最多为4)。点的形状由油漆的盖型控制。形状是一个正方形,除非帽子类型是圆形,在这种情况下,形状是圆形。
pts
float
:绘制点阵数[x0 y0 x1 y1 x2 y2 ...]offset
int
:开始绘制前要跳过的数值。count
int
:在跳过偏移量之后要处理的值的数量。由于一个点使用两个值,所绘制的“点”的数量真的是(count >> 1)。paint
Paint
油漆用来画点这个值永远不会null
。
drawPosText
void drawPosText(String text, float [] pos, 油漆漆)
此方法在API级别16中已弃用。
此方法不支持字形组合和分解,因此不应用于复制脚本。它也不处理补充字符(例如表情符号)。
绘制数组中的文本,每个字符的起始点由pos数组指定。
text
String
:要绘制的文字这个值永远不会null
。
pos
float
:用于定位每个字符的[x,y]位置的数组这个值永远不会null
。
paint
Paint
:用于文本的颜色(如颜色,大小,样式)这个值永远不会null
。
drawPosText
void drawPosText(char [] text, int索引, int计数, float [] pos, 油漆漆)
此方法在API级别16中已弃用。
此方法不支持字形组合和分解,因此不应用于复制脚本。它也不处理补充字符(例如表情符号)。
绘制数组中的文本,每个字符的起始点由pos数组指定。
text
char
:要绘制的文字这个值永远不会null
。
index
int
:绘制第一个字符的索引count
int
:从索引开始绘制的字符数。pos
float
:用于定位每个字符的[x,y]位置的数组这个值永远不会null
。
paint
Paint
:用于文本的颜色(如颜色,大小,样式)这个值永远不会null
。
drawRGB
void drawRGB(int r, int g, int b)
使用srcover porterduff模式,使用指定的RGB颜色填充整个画布的位图(仅限于当前的剪辑)。
r
int
:将颜色的红色成分(0..255)绘制到画布上g
int
:将绿色组件(0..255)的颜色绘制到画布上b
int
:蓝色组件(0..255)的颜色要画在画布上的drawRect
void drawRect(float left, 浮动顶部, 浮动右 浮底, 油漆漆)
使用指定的绘图绘制指定的Rect。矩形将根据油漆中的样式填充或框架。
left
float
:要绘制的矩形的左侧top
float
:要绘制的矩形的顶端right
float
:要绘制的矩形的右侧bottom
float
:要绘制的矩形的底部paint
Paint
:用来画直角的油漆这个值永远不会null
。
的drawRect
void drawRect(Rect r, Paint paint)
使用指定的绘图绘制指定的Rect。矩形将根据油漆中的样式填充或框架。
r
Rect
:要绘制的矩形。这个值永远不会null
。
paint
Paint
:用来绘制矩形的油漆这个值永远不会null
。
的drawRect
void drawRect(RectF rect, Paint paint)
使用指定的绘图绘制指定的Rect。矩形将根据油漆中的样式填充或框架。
rect
RectF
:要画的矩形这个值永远不会null
。
paint
Paint
:用来画直角的油漆这个值永远不会null
。
drawRoundRect
void drawRoundRect(RectF rect, float rx, 浮动ry, 油漆漆)
使用指定的油漆绘制指定的圆弧。根据油漆中的风格,圆形将被填充或框架。
rect
RectF
:要绘制的roundRect的矩形边界这个值永远不会null
。
rx
float
:用于圆角的椭圆的x半径ry
float
:用于圆角的椭圆的y半径paint
Paint
:用来绘制圆形的油漆这个值永远不会null
。
drawRoundRect
void drawRoundRect(float left, 浮动顶部, 浮动右 浮底, float rx, 浮动ry, 油漆漆)
使用指定的油漆绘制指定的圆弧。根据油漆中的风格,圆形将被填充或框架。
left
float
top
float
right
float
bottom
float
rx
float
:用于圆角的椭圆的x半径ry
float
:用于圆角的椭圆的y半径paint
Paint
:用来绘制圆形的油漆这个值永远不会null
。
的drawText
void drawText(CharSequence text, int开始, int结束, 浮动x, 浮动y, 油漆漆)
绘制指定范围的文本,由起始/终止指定,其起始位于(x,y),在指定的“绘画”中。基于油漆中的对齐设置来解释原点。
text
CharSequence
:要绘制的文字这个值永远不会null
。
start
int
:要绘制的文本中的第一个字符的索引end
int
:(end-1)是要绘制的文本中的最后一个字符的索引x
float
:用于绘制文本的原点的x坐标y
float
:用于绘制文本的原点的y坐标paint
Paint
:用于文本的颜色(如颜色,大小,样式)这个值永远不会null
。
的drawText
void drawText(String text, 浮动x, 浮动y, 油漆漆)
使用指定的油漆绘制文本,原点为(x,y)。根据油漆中的对齐设置对原点进行解释。
text
String
:要绘制的文字这个值永远不会null
。
x
float
:正在绘制的文本的原点的x坐标y
float
:正在绘制的文本的基线的y坐标paint
Paint
:用于文本的颜色(如颜色,大小,样式)这个值永远不会null
。
的drawText
void drawText(char [] text, int索引, int计数, 浮动x, 浮动y, 油漆漆)
使用指定的油漆绘制文本,原点为(x,y)。根据油漆中的对齐设置对原点进行解释。
text
char
:要绘制的文字这个值永远不会null
。
index
int
count
int
x
float
:正在绘制的文本的原点的x坐标y
float
:正在绘制的文本的基线的y坐标paint
Paint
:用于文本的颜色(如颜色,大小,样式)这个值永远不会null
。
的drawText
void drawText(String text, int开始, int结束, 浮动x, 浮动y, 油漆漆)
使用指定的油漆绘制文本,原点为(x,y)。根据油漆中的对齐设置对原点进行解释。
text
String
:要绘制的文字这个值永远不会null
。
start
int
:要绘制的文本中的第一个字符的索引end
int
:(end-1)是要绘制的文本中的最后一个字符的索引x
float
:正在绘制的文本的原点的x坐标y
float
:正在绘制的文本的基线的y坐标paint
Paint
:用于文本的颜色(如颜色,大小,样式)这个值永远不会null
。
drawTextOnPath
void drawTextOnPath(String text, Path path, float hOffset, float vOffset, 油漆漆)
沿着指定的路径使用指定的油漆绘制原点(x,y)的文本。油漆的“对齐”设置确定了开始文本的路径。
text
String
:要绘制的文字这个值永远不会null
。
path
Path
:文本应该遵循的路径为其基线这个值永远不会null
。
hOffset
float
:沿路径的距离添加到文本的起始位置vOffset
float
:( - )或以下的距离(+)定位文本的路径paint
Paint
:用于文本的颜色(如颜色,大小,样式)这个值永远不会null
。
drawTextOnPath
void drawTextOnPath(char [] text, int索引, int计数, 路径路径, float hOffset, float vOffset, 油漆漆)
沿着指定的路径使用指定的油漆绘制原点(x,y)的文本。油漆的“对齐”设置确定了开始文本的路径。
text
char
:要绘制的文字这个值永远不会null
。
index
int
count
int
path
Path
:文本应该遵循的路径为其基线这个值永远不会null
。
hOffset
float
:沿路径的距离添加到文本的起始位置vOffset
float
:( - )或以下的距离(+)定位文本的路径paint
Paint
:用于文本的颜色(如颜色,大小,样式)这个值永远不会null
。
drawTextRun
void drawTextRun(char [] text, int索引, int计数, int contextIndex, int contextCount, 浮动x, 浮动y, boolean isRtl, 油漆漆)
在一个方向上绘制一行文本,具有复杂文本整形的可选上下文。
查看drawTextRun(CharSequence, int, int, int, int, float, float, boolean, Paint)
更多详情。此方法使用字符数组而不是CharSequence来表示字符串。而且,与drawText(char[], int, int, float, float, Paint)
在该方法中建立的模式一致,count
并且contextCount
被使用而不是结束位置的偏移; count = end - start, contextCount = contextEnd - contextStart
。
text
char
:要呈现的文字这个值永远不会null
。
index
int
:文本的开始渲染count
int
:要渲染的字符数contextIndex
int
:形成的上下文的开始。必须不大于索引。contextCount
int
:用于整形的上下文中的字符数。contexIndex + contextCount必须不小于index + count。x
float
:绘制文本的x位置y
float
:绘制文本的y位置isRtl
boolean
:运行是否在RTL方向paint
Paint
:油漆这个值永远不会null
。
drawTextRun
void drawTextRun(CharSequence text, int开始, int结束, int contextStart, int contextEnd, 浮动x, 浮动y, boolean isRtl, 油漆漆)
在一个方向上绘制一行文本,具有复杂文本整形的可选上下文。
文本的运行包括从字符start
到end
文本。此外,该范围contextStart
以contextEnd
被用作上下文,用于复杂文本整形的目的,如潜在不同的形状根据其旁边的文本阿拉伯语的文本。
超出范围的所有文本都将contextStart..contextEnd
被忽略。之间的文本 start
,并end
会进行布局和绘制。
运行的方向由明确指定isRtl
。因此,该方法仅适用于单个方向的运行。文本的对齐方式由Paint的TextAlign值确定。此外,0 <= contextStart <= start <= end <= contextEnd <= text.length
必须坚持进入。
另请参见getRunAdvance(char[], int, int, int, int, boolean, int)
相应的方法来测量文本; 绘制文本的前进宽度与从该方法获得的值相匹配。
text
CharSequence
:要呈现的文字这个值永远不会null
。
start
int
:文本的开始渲染。此位置之前的数据可用于形成上下文。end
int
:要渲染的文本的结尾。此位置之前或之后的数据可用于形成上下文。contextStart
int
:形成上下文开始的索引contextEnd
int
:整形上下文结束的索引x
float
:绘制文本的x位置y
float
:绘制文本的y位置isRtl
boolean
:运行是否在RTL方向paint
Paint
:油漆这个值永远不会null
。
也可以看看:
drawTextRun(char[], int, int, int, int, float, float, boolean, Paint)
drawVertices
void drawVertices(Canvas.VertexMode mode, int vertexCount, float [] verts, int vertOffset, float [] texs, int texOffset, int []颜色, int colorOffset, 短[]指数, int indexOffset, int indexCount, 油漆漆)
绘制顶点数组,解释为三角形(基于模式)。verts数组是必需的,并指定每个顶点的x,y对。如果tex是非空的,那么它用于指定在每个顶点使用的着色器坐标中的坐标(在这种情况下,油漆必须有着色器)。如果没有texs数组,但是有一个颜色数组,那么每个颜色都会在其对应的三角形中以渐变方式插值。如果tex和颜色数组都存在,那么它们的行为就像以前一样,但是每个像素的结果颜色是将着色器和颜色渐变颜色相乘的结果。indices数组是可选的,但如果存在,则用于指定每个三角形的索引,而不是按顺序遍历数组。
mode
Canvas.VertexMode
:如何解释顶点数组这个值永远不会null
。
vertexCount
int
:顶点数组中的值的数量(如果为非空,则为相应的texs和颜色数组)。每个逻辑顶点是两个值(x,y),vertexCount必须是2的倍数。verts
float
:网格的顶点数组这个值永远不会null
。
vertOffset
int
:绘制之前要跳过的窗口中的值的数量。texs
float
:可能为null。如果不为空,则指定要采样到当前着色器中的坐标(例如位图图块或渐变)texOffset
int
:绘制之前要跳过的tex中的值的数量。colors
int
:可能为null。如果不为空,则为每个顶点指定要在三角形内插的颜色。colorOffset
int
:绘制前要跳过的颜色值的数量。indices
short
:如果不为null,则要引用到顶点的数组(texs,colors)数组。indexOffset
int
indexCount
int
:索引数组中的条目数(如果不为空)。paint
Paint
:指定要使用的着色器,如果texs数组不为空。getClipBounds
boolean getClipBounds(Rect bounds)
返回bounds参数中当前剪辑的边界(在局部坐标中),如果非空,则返回true。这可以以类似于quickReject的方式有用,因为它告诉您,在这些边界之外的绘图将被剪切出来。
bounds
Rect
:在这里返回剪辑边界。如果它为空,则忽略它,但如果当前剪辑不为空,则仍返回true。boolean
如果当前剪辑不为空,则为true。getClipBounds
Rect getClipBounds()
检索当前剪辑的边界(在本地坐标中)。
Rect
剪辑限制,或者如果剪辑为空,则为[0,0,0,0]。这个值永远不会null
。
getDensity
int getDensity()
返回画布的目标密度。默认密度来自其支持位图的密度,或者DENSITY_NONE
如果没有密度 。
int
返回画布的当前目标密度,用于在绘制位图时确定缩放因子。也可以看看:
setDensity(int)
getDensity()
getDrawFilter
DrawFilter getDrawFilter()
DrawFilter
该值可能是null
。
的getHeight
int getHeight()
返回当前绘图层的高度
int
当前绘图层的高度getMatrix
void getMatrix(Matrix ctm)
这种方法在API级别16中已被弃用。Hardware accelerated
当传递给View或Drawable时,画布可能具有任何矩阵,因为它是在层次结构中定义的实现方式,因此可以创建这样的画布。在这种情况下,推荐在不考虑当前矩阵的情况下绘制内容,或者跟踪画布外的相关变换状态。
返回ctm中的当前变换矩阵。这不会改变画布中的矩阵,而只是返回它的一个副本。
ctm
Matrix
这个值永远不会null
。
getMatrix
Matrix getMatrix()
这种方法在API级别16中已被弃用。Hardware accelerated
当传递给View或Drawable时,画布可能具有任何矩阵,因为它是在层次结构中定义的实现方式,因此可以创建这样的画布。在这种情况下,推荐在不考虑当前矩阵的情况下绘制内容,或者跟踪画布外的相关变换状态。
返回一个新的矩阵与一个画布的当前变换矩阵的副本。
Matrix
这个值永远不会null
。
getMaximumBitmapHeight
int getMaximumBitmapHeight()
返回使用此画布绘制的位图的最大允许高度。尝试使用比此值高的位图绘制将导致错误。
int
也可以看看:
getMaximumBitmapWidth()
getMaximumBitmapWidth
int getMaximumBitmapWidth()
返回使用此画布绘制的位图的最大允许宽度。尝试使用比此值更宽的位图绘制会导致错误。
int
也可以看看:
getMaximumBitmapHeight()
getSaveCount
int getSaveCount()
返回Canvas私有堆栈上矩阵/剪辑状态的数量。这将等于#save()调用 - #restore()调用。
int
的getWidth
int getWidth()
返回当前绘图层的宽度
int
当前绘图层的宽度isHardwareAccelerated
boolean isHardwareAccelerated()
指示此Canvas是否使用硬件加速。请注意,此方法没有定义什么类型的硬件加速可能或可能不使用。
boolean
如果绘图操作是硬件加速,则为真,否则为false。isOpaque
boolean isOpaque()
如果当前图层绘制的设备是不透明的(即不支持每像素alpha),则返回true。
boolean
如果当前图层所绘制的设备是不透明的,则为truequickReject
boolean quickReject(float left, 浮动顶部, 浮动右 浮底, Canvas.EdgeType类型)
如果指定的矩形在被当前矩阵变换之后将完全位于当前剪辑之外,则返回true。调用它来检查您打算绘制的区域是否被剪裁(因此您可以跳过绘制调用)。
left
float
:与当前剪辑进行比较的矩形左侧top
float
:与当前剪辑进行比较的矩形顶部right
float
:与当前剪辑进行比较的矩形右侧bottom
float
:与当前剪辑进行比较的矩形底部type
Canvas.EdgeType
:AA
如果路径应该被视为抗锯齿,因为这意味着它可能会影响比非抗锯齿(BW
)更大的面积(更多的像素)。这个值永远不会null
。
boolean
如果rect(由画布矩阵转换)与画布的剪辑不相交,则为truequickReject
boolean quickReject(RectF rect, Canvas.EdgeType type)
如果指定的矩形在被当前矩阵变换之后将完全位于当前剪辑之外,则返回true。调用它来检查您打算绘制的区域是否被剪裁(因此您可以跳过绘制调用)。
rect
RectF
:与当前剪辑进行比较的rect这个值永远不会null
。
type
Canvas.EdgeType
:AA
如果路径应该被视为抗锯齿,因为这意味着它可能会影响比非抗锯齿(BW
)更大的面积(更多的像素)。这个值永远不会null
。
boolean
如果rect(由画布矩阵转换)与画布的剪辑不相交,则为truequickReject
boolean quickReject(路径路径, Canvas.EdgeType类型)
如果指定的路径被当前矩阵转换后将完全位于当前剪辑之外,则返回true。调用它来检查您打算绘制的区域是否被剪裁(因此您可以跳过绘制调用)。注意:对于速度,即使路径本身可能不与剪辑相交(即,路径的边界相交,但路径不相交),它可能会返回false。
path
Path
:与当前剪辑进行比较的路径这个值永远不会null
。
type
Canvas.EdgeType
:AA
如果路径应该被视为抗锯齿,因为这意味着它可能会影响比非抗锯齿(BW
)更大的面积(更多的像素)。这个值永远不会null
。
boolean
如果路径(由画布矩阵转换)与画布的剪辑不相交,则为true恢复
void restore()
此调用平衡先前对save()的调用,并用于从上次保存调用后删除对矩阵/片段状态的所有修改。调用restore()比save()被调用多一次是一个错误。
restoreToCount
void restoreToCount(int saveCount)
高效的方式弹出保存计数之后发生的save()的所有调用到达saveCount。这是saveCount小于1的错误。示例:int count = canvas.save(); ... //更多的调用潜在地保存()canvas.restoreToCount(count); //现在画布回到处于初始//调用save()之前的状态。
saveCount
int
:恢复到的保存级别。回转
void rotate(float degrees)
用指定的旋转预先计算当前矩阵。
degrees
float
:旋转量,以度为单位回转
void rotate(float degrees, 浮点px, 浮动py)
用指定的旋转预先计算当前矩阵。
degrees
float
:旋转量,以度为单位px
float
:枢轴点的x坐标(旋转不变)py
float
:枢轴点的y坐标(旋转不变)保存
int save(int saveFlags)
这种方法在API级别被废弃26
使用save()
来代替。
基于saveFlags,可以将当前矩阵和剪辑保存到专用堆栈上。
注意:如果可能,请使用无参数的save()。它比使用此方法单独禁用矩阵或剪辑的方式更简单和更快。
随后的转换,缩放,旋转,偏移,concat或clipRect,clipPath都将像往常一样运行,但是当进行对restore()的平衡调用时,这些调用将被遗忘,并且save()之前存在的设置将被恢复。
saveFlags
int
:指定要保存/还原的Canvas状态的哪些部分的标志位int
传递给restoreToCount()的值来平衡此save()保存
int save()
将当前矩阵和剪辑保存到专用堆栈上。
随后的转换,缩放,旋转,偏移,concat或clipRect,clipPath都将像往常一样运行,但是当进行对restore()的平衡调用时,这些调用将被遗忘,并且save()之前存在的设置将被恢复。
int
传递给restoreToCount()的值来平衡此save()保存层
int saveLayer(RectF bounds, Paint paint, int saveFlags)
这种方法在API级别被废弃26
使用saveLayer(RectF, Paint)
来代替。
这与save()的行为相同,但是它另外分配并将绘图重定向到屏幕外的位图。
注意:这种方法非常昂贵,导致包含内容的渲染成本超过两倍。避免使用此方法,特别是如果提供的边界较大,或者CLIP_TO_LAYER_SAVE_FLAG
从saveFlags
参数中省略 。建议 hardware layer
在视图上使用一个xfermode,彩色滤镜或alpha,因为它的性能要好于这种方法。
所有绘图调用均定向到新分配的屏幕外位图。只有当对restore()进行平衡调用时,屏幕上的缓冲区才被绘制回Canvas的当前目标(屏幕,目标位图或上一层)。
油漆的属性- alpha
, Xfermode
和 ColorFilter
被当屏幕外的位图被拉回恢复时采用()被调用。
bounds
RectF
:可能为null。屏幕位图需要的最大尺寸(局部坐标)paint
Paint
:这是被复制的,并且在调用restore()时被应用到屏幕上。该值可能是null
。
saveFlags
int
:见_SAVE_FLAG常数,一般ALL_SAVE_FLAG
建议出于性能原因。int
值传递给restoreToCount()以平衡此save()保存层
int saveLayer(RectF bounds, Paint paint)
这与save()的行为相同,但是它还将绘图分配并重定向到屏幕外渲染目标。
注意:这种方法非常昂贵,导致包含内容的渲染成本超过两倍。避免在可能的情况下使用此方法,而是使用 hardware layer
View在应用xfermode,颜色滤镜或alpha,因为它会比这种方法好得多。
所有绘图调用均定向到新分配的屏幕外渲染目标。只有当对restore()进行平衡调用时,是否将屏幕外缓冲区绘制回Canvas的当前目标(如果这些调用是嵌套的,那么它们可能是上一层)。
油漆的属性- alpha
, Xfermode
以及 ColorFilter
当屏幕外渲染目标被拉回时恢复应用()被调用。
bounds
RectF
:可能为null。屏幕外渲染目标所需的最大大小(局部坐标)paint
Paint
:这是被复制的,并且在调用restore()时被应用到屏幕上。该值可能是null
。
int
值传递给restoreToCount()以平衡此save()保存层
int saveLayer(float left, 浮动顶部, 浮动右 浮底, 油漆漆)
方便的saveLayer(RectF, Paint)
是采用边界矩形的四个浮点坐标。
left
float
top
float
right
float
bottom
float
paint
Paint
该值可能是null
。
int
保存层
int saveLayer(float left, 浮动顶部, 浮动右 浮底, 油漆, int saveFlags)
这种方法在API级别被废弃26
使用saveLayer(float, float, float, float, Paint)
来代替。
保存版本的saveLayer()取4个值而不是一个RectF。
left
float
top
float
right
float
bottom
float
paint
Paint
该值可能是null
。
saveFlags
int
int
保存阿尔法层
int saveLayerAlpha(float left, 浮动顶部, 浮动右 浮底, int alpha, int saveFlags)
这种方法在API级别被废弃26
使用saveLayerAlpha(float, float, float, float, int)
来代替。
对于SaveLayerAlpha()的Helper,它取4个值而不是一个RectF。
left
float
top
float
right
float
bottom
float
alpha
int
saveFlags
int
int
保存阿尔法层
int saveLayerAlpha(RectF bounds, int alpha)
方便saveLayer(RectF, Paint)
而不是使用整个Paint对象,它只需要alpha
参数。
bounds
RectF
:屏幕位图需要的最大大小(局部坐标)该值可能是null
。
alpha
int
:在恢复期间绘制时应用于屏幕的阿尔法()int
保存阿尔法层
int saveLayerAlpha(RectF bounds, int alpha, int saveFlags)
这种方法在API级别被废弃26
使用saveLayerAlpha(RectF, int)
来代替。
这与save()的行为相同,但是它另外分配并将绘图重定向到屏幕外的位图。
注意:这种方法非常昂贵,导致包含内容的渲染成本超过两倍。避免使用此方法,特别是如果提供的边界较大,或者CLIP_TO_LAYER_SAVE_FLAG
从saveFlags
参数中省略 。建议 hardware layer
在视图上使用一个xfermode,彩色滤镜或alpha,因为它的性能要好于这种方法。
所有绘图调用均定向到新分配的屏幕外位图。只有当对restore()进行平衡调用时,屏幕上的缓冲区才被绘制回Canvas的当前目标(屏幕,目标位图或上一层)。
alpha
当调用restore()时屏幕位图被绘制时, 该参数被应用。
bounds
RectF
:屏幕位图需要的最大大小(局部坐标)该值可能是null
。
alpha
int
:在恢复期间绘制时应用于屏幕的阿尔法()saveFlags
int
:见_SAVE_FLAG常数,一般ALL_SAVE_FLAG
建议出于性能原因。int
值传递给restoreToCount()以平衡此调用保存阿尔法层
int saveLayerAlpha(float left, 浮动顶部, 浮动右 浮底, int alpha)
方便的saveLayerAlpha(RectF, int)
是采用边界矩形的四个浮点坐标。
left
float
top
float
right
float
bottom
float
alpha
int
int
规模
void scale(float sx, 浮动和, 浮点px, 浮动py)
以指定的比例预先计算当前矩阵。
sx
float
:X中的量化量sy
float
:Y量表px
float
:枢轴点的x坐标(按比例不变)py
float
:枢轴点的y坐标(按比例不变)规模
void scale(float sx, 浮动和)
以指定的比例预先计算当前矩阵。
sx
float
:X中的量化量sy
float
:Y量表setBitmap
void setBitmap(Bitmap bitmap)
指定要绘制的画布的位图。所有画布状态(如图层,过滤器和保存/恢复堆栈)都将重置。此外,画布的目标密度更新为与位图的目标密度相匹配。在API级别之前,Build.VERSION_CODES.O
保留当前矩阵和剪辑堆栈。
bitmap
Bitmap
:指定要绘制的画布的可变位图。该值可能是null
。
也可以看看:
setDensity(int)
getDensity()
setDensity
void setDensity(int density)
指定此Canvas的支持位图的密度。这样可以修改画布本身的目标密度,还可以修改其背景位图的密度Bitmap.setDensity(int)
。
density
int
:画布的新目标密度,用于在绘制位图时确定缩放因子。使用 DENSITY_NONE
禁用位图缩放。也可以看看:
getDensity()
setDensity(int)
setDrawFilter
void setDrawFilter(DrawFilter filter)
filter
DrawFilter
该值可能是null
。
setMatrix
void setMatrix(矩阵矩阵)
用指定的矩阵完全替换当前矩阵。如果矩阵参数为空,则将当前矩阵重置为标识。 注:建议使用concat(Matrix)
, scale(float, float)
,translate(float, float)
和 rotate(float)
采用这个方法。
matrix
Matrix
:用矩阵替换当前矩阵。如果为空,则将当前矩阵设置为标识。也可以看看:
concat(Matrix)
歪斜
void skew(float sx, 浮动和)
以指定的偏移量预先计算当前矩阵。
sx
float
:X的偏移量sy
float
:在Y中倾斜的量翻译
void translate(float dx, 浮雕)
用指定的转换预先计算当前矩阵
dx
float
:在X中翻译的距离dy
float
:在Y中翻译的距离受保护的方法
checkRange
void checkRange(int length, int offset, int count)
length
int
offset
int
count
int
throwIfCannotDraw
void throwIfCannotDraw(Bitmap bitmap)
bitmap
Bitmap
(2017年9月调查)