Android canvas画布,Android 画布Canvas

写完 Android 画笔Paint,自然少不了Canvas画布,本文延续上篇风格,一一来过Canvas API

drawARGB

1void drawARGB (int a,int r,int g,int b)

统一颜色绘制,四个参数取值范围0~255

drawArc

12345void drawArc (RectF oval,float startAngle,float sweepAngle,boolean useCenter,Paint paint)

绘制弧面或弧线。对于绘制对应图形的填充面,还是图形的轮廓线,这在于画笔Paint中的setStyle。

oval:矩形;

startAngle:起点角度,0度的角度对应于0度的几何角(在手表3点钟);

sweepAngle:顺时针扫过的角度;

useCenter:弧面或弧线;

paint:画笔

弧面12RectF rectF = new RectF(100f, 100f, 500f, 500f);canvas.drawArc(rectF, 0, 150, true, mPaint);

AAffA0nNPuCLAAAAAElFTkSuQmCC

弧线12RectF rectF = new RectF(100f, 100f, 500f, 500f);canvas.drawArc(rectF, 0, 150, false, mPaint);

drawBitmap

绘制使用指定的矩阵的位图。123456789101112131415//方法1void drawBitmap (Bitmap bitmap,float left,float top,Paint paint)//方法2void drawBitmap (Bitmap bitmap,Rect src,Rect dst,Paint paint)//方法3void drawBitmap (Bitmap bitmap,Matrix matrix,Paint paint)

例子代码1234567891011121314mBitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.logo);canvas.drawBitmap(mBitmap, 0, 0, mPaint);//绘制Bitmap的一部分,并对其拉伸//srcRect绘制Bitmap的哪一部分Rect src = new Rect(0, 0, mBitmap.getWidth(), mBitmap.getHeight() / 3);//dstRecF绘制的Bitmap拉伸到哪里RectF dst = new RectF(0, mBitmap.getHeight(), canvas.getWidth(), mBitmap.getHeight() + 200);canvas.drawBitmap(mBitmap, src, dst, mPaint);Matrix matrix = new Matrix();matrix.postTranslate(0, mBitmap.getHeight() + 200);canvas.drawBitmap(mBitmap, matrix, mPaint);

drawBitmapMesh

12345678void drawBitmapMesh (Bitmap bitmap,int meshWidth,int meshHeight,float[] verts,int vertOffset,int[] colors,int colorOffset,Paint paint)

绘制网格顶点被均匀地分布在该位图

bitmap:位图

meshWidth:横向上把该源位图划成成多少格

meshHeight:竖向上把该源位图划成成多少格

verts:长度为(meshWidth + 1) (meshHeight + 1)2的数组,它记录了扭曲后的位图各顶点位置

vertOffset:控制verts数组中从第几个数组元素开始才对bitmap进行扭曲

colors:可以为null,指定在每个顶点,其值由对应的位图颜色相乘内插的颜色。如果不为空,必须有至少(meshWidth+ 1)*(meshHeight+ 1)+ colorOffset数组中的值。

colorOffset int: Number of color elements to skip before drawing

paint:画笔,可以为null

drawCircle

1234void drawCircle (float cx,float cy,float radius,Paint paint)

绘制圆

cx,cy代表圆心的坐标

radius圆的半径

paint画笔1canvas.drawCircle(500f, 500f, 200, mPaint);

drawColor

1void drawColor (int color)

设置画布颜色

drawLine

1234567891011void drawLine (float startX,float startY,float stopX,float stopY,Paint paint)void drawLines (float[] pts,Paint paint)void drawLines (float[] pts,int offset,int count,Paint paint)

画线

方法1

startX,startY起点坐标

stopX,stopY终点坐标

paint画笔

方法2

pts:绘制直线的端点数组,每条直线占用4个数据,即起终点坐标。

paint:绘制直线所使用的画笔。

方法2

pts:绘制直线的端点数组,每条直线占用4个数据,即起终点坐标。

offset:跳过的数据个数,取值为4的倍数。

count:实际参与绘制的数据个数。

paint:绘制直线所使用的画笔。

1canvas.drawLine(100f,100f,500f,500f,mPaint);

12345float[] pts = {100f, 100f, 400f, 400f,400f, 400f, 250f, 560f,250f, 560f, 400f, 800f,400f, 800f, 280f, 880f};canvas.drawLines(pts, mPaint);

123456float[] pts = {100f, 100f, 400f, 400f,400f, 400f, 250f, 560f,250f, 560f, 400f, 800f,400f, 800f, 280f, 880f};//有选择地绘制直线canvas.drawLines(pts, 4, 8, mPaint);

跳过前4个数据,绘制后面8的数据,即绘制了第二第三个点:

drawOval

1void drawOval (RectF oval,Paint paint)

绘制椭圆1234RectF rectF = new RectF(100f, 100f, 600f, 500f);//等同于圆的效果//RectF rectF = new RectF(100f, 100f, 500f, 500f);canvas.drawOval(rectF, mPaint);

drawPath

1void drawPath (Path path,Paint paint)

例子12345Path path = new Path();//向Path中加入ArcRectF arcRecF = new RectF(0, 0, 500, 500);path.addArc(arcRecF, 0, 135);canvas.drawPath(path, mPaint);

更多Path(宝藏,可继续挖掘),详见博客android绘图之Path总结

drawPoint

123void drawPoint (float x,float y,Paint paint)

绘制点,x,y分别是点坐标123456void drawPoints (float[] pts,int offset,int count,Paint paint)void drawPoints (float[] pts,Paint paint)

drawPoints与drawLines类似

drawRGB

123void drawRGB (int r,int g,int b)

RGB绘制画布颜色,取值也是0~255

drawRect

12345void drawRect (float left,float top,float right,float bottom,Paint paint)

绘制矩形,前四个参数分别表示矩形的左,顶,右,低

12void drawRect (Rect r,Paint paint)void drawRect (RectF rect,Paint paint)

Rect 和 RectF区别是Rect初始化 是int,RectF 是left

1canvas.drawRect(100f,100f,500f,500f,mPaint);

drawRoundRect

1234void drawRoundRect (RectF rect,float rx,float ry,Paint paint)

绘制圆矩形

rx:圆角x方向的半径

ry:圆角y方向的半径

12RectF rectF = new RectF(100f, 100f, 500f, 500f);canvas.drawRoundRect(rectF, 50, 150, mPaint);

drawText

12345678910111213141516void drawText (CharSequence text,int start,int end,float x,float y,Paint paint)void drawText (String text,float x,float y,Paint paint)void drawText (String text,int start,int end,float x,float y,Paint paint)

绘制文本

start:指的文本从哪个开始;end:文本结束的位置;x,y:文本起点1234mPaint.setTextSize(50);String text = "我的微信公众号:吴小龙同学";canvas.drawText(text, 2, text.length(), 100, 100, mPaint)canvas.drawText("我的微信公众号:吴小龙同学", 100, 400, mPaint);

drawTextOnPath

123456789101112void drawTextOnPath (String text,Path path,float hOffset,float vOffset,Paint paint)void drawTextOnPath (char[] text,int index,int count,Path path,float hOffset,float vOffset,Paint paint)

沿着Path绘制一段文字

hOffset : 与路径起始点的水平偏移距离

vOffset : 与路径中心的垂直偏移量

12345678Path path = new Path();//Path.Direction.CW,沿外环;Path.Direction.CCW,沿内环path.addCircle(500, 500, 200, Path.Direction.CW);mPaint.setTextSize(50);// 绘制路径canvas.drawPath(path, mPaint);String text = "我的微信公众号:吴小龙同学";canvas.drawTextOnPath(text, path, 0f, 0f, mPaint);

drawVertices

123456789101112void 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)

绘制顶点数组

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值