android Canvas参考

来源:互联网 发布:h5房卡麻将源码 编辑:程序博客网 时间:2024/06/05 12:08

很多时候android本身提供的控件并不能满足我们实现一些复杂或是酷炫的效果,这时候就得自定义View了,当然这里不会写写关于自定义View的,只是介绍下canvas常见的方法。

画圆弧:drawArc

drawArc(@NonNull RectF oval, float startAngle, float                                                    sweepAngle, boolean useCenter, @NonNull Paint paint)drawArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle, boolean useCenter, @NonNull Paint paint)

具体从参数方面来说可以绘制圆、椭圆、圆环、圆弧、扇形。
RectF oval:表示一个矩形,即绘制范围,正方形范围绘制圆,长方形范围绘制椭圆
float left, float top, float right, float bottom:可组成矩形
float startAngle:起始绘制角度,中心为原点,水平向右为0度,按顺时针方向绘制
float sweepAngle:圆弧扫过的角度,值360则绘制圆、椭圆、圆环,否则绘制圆弧、扇形,亦相当于设置进度条进度(0-360),是圆形进度条的实现方法之一
boolean useCenter:true绘制扇形,false绘制圆弧
Paint paint:设置画笔参数,以下将列出常用方法:

paint.setAntiAlias(true);// 抗锯齿paint.setStyle(Paint.Style.STROKE);// 线条画笔,可绘制圆环paint.setColor(Color.RED);// 设置画笔颜色paint.setStrokeWidth(10);// 设置画笔粗细paint.setShader(shader);// 设置颜色渐变,比如在这里可绘制彩色圆环进度条paint.setStrokeCap(Paint.Cap.ROUND);// 设置圆弧两端为圆弧闭合渐变Shader:LinearGradient:线性渐变:LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, TileMode tile)

画位图:drawBitmap

drawBitmap(@NonNull Bitmap bitmap, @Nullable Rect src, @NonNull Rect(F) dst, @Nullable Paint paint)Bitmap bitmap:要绘制的bitmapRect src:要绘制的bitmap的某部分或全部RectF dst:绘制bitmap的位置Paint paint:画笔,目测不知道有啥用
drawBitmap(@NonNull Bitmap bitmap, float left, float top, @Nullable Paint paint)Bitmap bitmap:要绘制的bitmapfloat left:左边偏移量float top:顶部偏移量Paint paint:画笔

填充颜色:drawColor

drawColor(@ColorInt int color, @NonNull PorterDuff.Mode mode)int color:绘制的画布颜色Mode mode:绘制模式

画线:drawLine

drawLine(float startX, float startY, float stopX, float stopY,         @NonNull Paint paint)float startX:线条起始x坐标,左上角坐标(0, 0)float startY:线条起始y坐标float stopX:线条终止x坐标float stopY:线条终止y坐标Paint paint:画笔

画笔绘制:drawPaint

drawPaint(@NonNull Paint paint)Paint.Style.STROKE:给画布画边框Paint.Style.FILL:给画布填充颜色

画矩形:drawRect(F)

drawRect(F)(@NonNull RectF rect, @NonNull Paint paint)Paint.Style.STROKE:画边框,大小为rectPaint.Style.FILL:画背景,大小为rect

画圆:drawCircle

drawCircle(float cx, float cy, float radius, @NonNull Paint paint)float cx, float cy:圆心坐标(cx, cy)Paint paint:画笔,STROKE空心;FILL实心

画椭圆:drawOval

drawOval(@NonNull RectF oval, @NonNull Paint paint)drawOval(float left, float top, float right, float bottom, @NonNull Paint paint)RectF oval = new RectF(left, top, right, bottom);RectF oval:绘制区域Paint paint:画笔,STROKE空心;FILL实心

画点:drawPoint

drawPoint(float x, float y, @NonNull Paint paint)float x, float y:画点位置(x, y)Paint paint:画笔

画圆角矩形:drawRoundRect

drawRoundRect(@NonNull RectF rect, float rx, float ry, @NonNull Paint paint)drawRoundRect(float left, float top, float right, float bottom, float rx, float ry, @NonNull Paint paint)RectF rect = new RectF(left, top, right, bottom);RectF rect:绘制区域float rx, float ry:圆角半径Paint paint:画笔

drawText

drawText(@NonNull char[] text, int index, int count, float x, float y, @NonNull Paint paint)drawText(@NonNull String text, float x, float y, @NonNull Paint paint)drawText(@NonNull String text, int start, int end, float x, float y, @NonNull Paint paint)drawText(@NonNull CharSequence text, int start, int end, float x, float y, @NonNull Paint paint)int start, int end:截取部分文本绘制float x, float y:再坐标(x, y)处开始绘制文本Paint paint:可设置字体大小等参数

绘制路径:drawPath

这个方法可以绘制比较复杂的一些函数曲线,这个不太熟悉,各位看官还是谷歌百度吧,这里简单介绍下常见方法:

drawPath(@NonNull Path path, @NonNull Paint paint)Path path:绘制路径Paint paint:画笔画个三角形:path.moveTo(0, getHeight()/4);path.lineTo(0, (getHeight() * 3) / 4);path.lineTo(getWidth(), getHeight()*3/4);path.close();画圆弧:相当于drawArc,参数useCenter为falseaddArc(RectF oval, float startAngle, float sweepAngle)addArc(float left, float top, float right, float bottom, float startAngle, float sweepAngle)画圆弧:默认闭合,forceMoveTo为true即圆弧,不闭合arcTo(RectF oval, float startAngle, float sweepAngle)arcTo(RectF oval, float startAngle, float sweepAngle, boolean forceMoveTo)画圆:圆心(x, y),半径radius,dir绘制方向addCircle(float x, float y, float radius, Direction dir)画椭圆:addOval(RectF oval, Direction dir)addOval(float left, float top, float right, float bottom, Direction dir)画矩形:addRect(RectF rect, Direction dir)addRect(float left, float top, float right, float bottom, Direction dir)画圆角矩形:addRoundRect(RectF rect, float rx, float ry, Direction dir)addRoundRect(float left, float top, float right, float bottom, float rx, float ry, Direction dir)画曲线:cubicTo(float x1, float y1, float x2, float y2, float x3, float y3)在(x1, y1)和(x3, y3)之间画曲线,以(x2, y2)为转折点画(曲)线:quadTo(float x1, float y1, float x2, float y2)(x1, y1)是控制点,(x2, y2)是终点,起点是当前点,默认(0, 0),可用moveTo设置当前点。
原创粉丝点击