Canvas、Paint、TextPaint、StaticLayout

一、Canvas

android.graphics.Canvas

要画东西,需要四个基本部件:1、一个保存像素的位图;2、一个来承载绘图调用(写入位图)的Canvas;3、绘图基元(例如Rect,Path,文本,位图);
4、画笔


内部类:
Canvas.EdgeType、Canvas.VertexMode  两个枚举类


构造方法:
Canvas()
Canvas(Bitmap bitmap)


方法:
drawARGB(int a, int r, int g, int b)
使用srcover porterduff模式,用指定的ARGB颜色填充整个画布的位图(仅限于当前剪辑)。


drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
绘制指定的弧,该弧将被缩放以适合指定的椭圆内。


drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
绘制指定的弧,该弧将被缩放以适合指定的椭圆内。


drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)
使用指定的矩阵绘制位图


drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
绘制指定的位图,自动缩放/翻译以填充目标矩形。


drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
绘制指定的位图,自动缩放/翻译以填充目标矩形。


drawBitmap(Bitmap bitmap, float left, float top, Paint paint)
使用由当前矩阵转换的指定颜料绘制指定的位图,其顶部/左侧角在(x,y)处。


drawBitmapMesh(Bitmap bitmap, int meshWidth, int meshHeight, float[] verts, int vertOffset, int[] colors, int colorOffset, Paint paint)
通过网格绘制位图,其中网格顶点均匀分布在位图中。


drawCircle(float cx, float cy, float radius, Paint paint)
通过指定的画笔画圆


drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
通过指定的画笔绘制一条具有指定的起点和终点的线段。


drawLines(float[] pts, int offset, int count, Paint paint)
绘制一组线段


drawOval(RectF oval, Paint paint)
画椭圆


drawOval(float left, float top, float right, float bottom, Paint paint)
画椭圆


drawPath(Path path, Paint paint)
画路径


drawPicture(Picture picture, RectF dst)
绘制图片,拉伸以适合dst矩形。


drawPicture(Picture picture)
保存画布状态,绘制图片并恢复画布状态。


drawPoint(float x, float y, Paint paint)
画单个点


drawPoints(float[] pts, int offset, int count, Paint paint)
画一组点


drawPoints(float[] pts, Paint paint)
画一组点


drawRect(float left, float top, float right, float bottom, Paint paint)
画矩形


drawRect(Rect r, Paint paint)
画矩形


drawRect(RectF rect, Paint paint)
画矩形


drawRoundRect(RectF rect, float rx, float ry, Paint paint)
通过指定的画笔绘制指定的圆角


drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, Paint paint)
通过指定的画笔绘制指定的圆角


drawText(String text, float x, float y, Paint paint)
画文本(写字)


drawText(CharSequence text, int start, int end, float x, float y, Paint paint)
绘制指定范围的文本,由start / end指定,其原点位于(x,y)指定的Paint中。


drawText(char[] text, int index, int count, float x, float y, Paint paint)
画文本(写字)


drawText(String text, int start, int end, float x, float y, Paint paint)
画文本(写字)


drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint)
沿着指定的路径使用指定的绘图绘制文本,原点位于(x,y)处


drawTextOnPath(char[] text, int index, int count, Path path, float hOffset, float vOffset, Paint paint)
沿着指定的路径使用指定的绘图绘制文本,原点位于(x,y)处


drawTextRun(CharSequence text, int start, int end, int contextStart, int contextEnd, float x, float y, boolean isRtl, Paint paint)
在单一方向上绘制一段文字,并带有用于复杂文字整形的可选上下文


drawTextRun(char[] text, int index, int count, int contextIndex, int contextCount, float x, float y, boolean isRtl, Paint paint)
在单一方向上绘制一段文字,并带有用于复杂文字整形的可选上下文


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)
绘制顶点数组,解释为三角形(基于模式)


getDensity()
获取画布的目标密度


getHeight()
返回当前绘图图层的高度


getWidth()
返回当前绘图图层的宽度


getMaximumBitmapHeight()
返回使用此画布绘制的位图的最大允许高度


getMaximumBitmapWidth()
返回使用此画布绘制的位图的最大允许宽度


isHardwareAccelerated()
指示此canvas是否使用硬件加速


restore()
此调用将先前调用save(),并用于移除自上次保存调用以来对矩阵/剪辑状态的所有修改


restoreToCount(int saveCount)
有效的方式来弹出任何调用save()之后发生的保存计数达到saveCount


rotate(float degrees)
用指定的旋转预先缩放当前矩阵


rotate(float degrees, float px, float py)
用指定的旋转预先缩放当前矩阵  最终方法


save()
保存当前矩阵并剪辑到私有堆栈上


saveLayer(RectF bounds, Paint paint)
它的行为与save()相同,但是它还分配并将图形重定向到屏幕外渲染目标


saveLayer(float left, float top, float right, float bottom, Paint paint)
它的行为与save()相同,但是它还分配并将图形重定向到屏幕外渲染目标


scale(float sx, float sy)
用指定的比例预先缩放当前矩阵


scale(float sx, float sy, float px, float py)
用指定的比例预先缩放当前矩阵  最终方法


setBitmap(Bitmap bitmap)
设置指定位图


setDensity(int density)
指定此Canvas的支持位图的密度


setMatrix(Matrix matrix)
用指定矩阵完全替换当前矩阵


skew(float sx, float sy)
用指定的偏斜对当前矩阵进行预先扫描


translate(float dx, float dy)

用指定的转换对当前矩阵进行预处理


二、Paint

android.graphics.Paint

Paint类保存关于如何绘制几何图形,文本和位图的样式和颜色信息


构造方法:
Paint()
用默认的设置构造一个画笔


Paint(int flags)
用指定标志构造一个画笔


Paint(Paint paint)
构造一个画笔,并用paint参数的属性初始化该画笔的属性


方法:
reset()
重置画笔至默认设置


setColor(int color)
设置画笔的颜色


setARGB(int a, int r, int g, int b)
作为setColor(int color)的补充


setAlpha(int a)
设置alpha值


setAntiAlias(boolean aa)
设置是否抗锯齿


setColorFilter(ColorFilter filter)
设置或清除涂料的颜色过滤器,返回参数


setDither(boolean dither)
用于setFlags()的帮助器,设置或清除DITHER_FLAG位抖动影响比设备更高精度的颜色如何下采样


setHinting(int mode)
设置画笔的提示模式


setStyle(Paint.Style style)
设置样式


setTextSize(float textSize)

设置画笔的字体大小


三、TextPaint

android.graphics.Paint
      android.text.TextPaint
Paint的子类
TextPaint是Paint的一个扩展,为文本测量和绘图时使用的一些额外数据留下空间。

四、StaticLayout

Layout的子类

这由小部件用来控制文本布局。 除非您正在实现自己的窗口小部件或自定义显示对象,否则您不需要直接使用此类,或者试图直接调用Canvas.drawText()


五、

使用Canvas画字符时,常常遇到字符很长,不会换行的问题。
解决办法如下:
1、使用TextPaint,而不是Paint。
2、不使用canvas的drawText方法。
3、使用StaticLayout。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值