方法定义 | 说明 | 备注 |
public void set(Paint src) | 根据已有画笔的属性进行赋值 | |
public void setColor(int color) | 设置颜色 | |
public void setAlpha(int alpha) | 设置透明度,alpha为透明度,取值范围为0~255,数值越小越透明 | |
public void setARGB(int a, int r, int g, int b) | 设置透明度和颜色,a表明透明度,r,g,b表明颜色值 | |
public void setAntiAlias(boolean aa) | 设置是否使用抗锯齿功能,比较耗资源,减慢绘制速度html
|
详细的解释见3.1 |
public void setDither(boolean dither) | 设定是否使用图像抖动,如true,绘制出来的图片颜色更饱满、清晰 java
|
详细的解释见3.2 |
public void setStyle(android.graphics._Original_Paint.Style style) | 设置画笔的样式,为FILL,FILL_OR_STROKE,或STROKE android |
说明:当咱们在调用drawCircle、drawOval、drawArc、drawRect等方法时,咱们既能够绘制对应图形的填充面,也能够只绘制该图形的轮廓线,控制的关键在于画笔Paint中的style。Paint经过setStyle方法设置要绘制的类型,style有取三种值:Paint.Style.FILL、Paint.Style.STROKE和Paint.Style.FILL_AND_STROKE。canvas 当style为FILL时,绘制是填充面,FILL是Paint默认的style;ide 当style为STROKE时,绘制的是图形的轮廓线;性能 当style为FILL_AND_STROKE时,同时绘制填充面和轮廓线,不过这种状况用的很少,由于填充面和轮廓线是用同一种颜色绘制的,区分不出轮廓线的效果。字体 |
public void setStrokeCap(Cap cap) | 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的图形样式,如圆形样式 Cap.ROUND,或方形样式Cap.SQUARE | |
public void setStrokeWidth(float width) | 当画笔样式为STROKE或FILL_OR_STROKE时,设置笔刷的粗细度 |
方法 | 说明 | 备注 |
public void setTextSize(float textSize) | 设置文字大小 | |
public void setTextScaleX(float scaleX) | 设置文字x轴的缩放比例,能够实现文字的拉伸效果 | |
public void setTextSkewX(float skewX) | 设置文字倾斜弧度 | |
public void setUnderlineText(boolean flag) | 设置文字下划线效果 | |
public void setStrikeThruText(boolean flag) | 设置删除线效果 | |
public Typeface setTypeface(Typeface typeface) | 设置字体风格 | 接收参数为 Typeface对象,在Typeface.java类中,比较简单的,有defaultFromStyle方法返回Typeface对象动画 代码:paint.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD)); spa |
public void setTextAlign(android.graphics._Original_Paint.Align align) | 设置文字的对齐方向 | 可选LEFT、CENTER和RIGHT。 |
这个类至关于一个画布,你能够在里面画不少东西;.net
咱们能够把这个Canvas理解成系统提供给咱们的一块内存区域(但实际上它只是一套画图的API,真正的内存是下面的Bitmap),并且它还提供了一整套对这个内存区域进行操做的方法,全部的这些操做都是画图API。也就是说在这种方式下咱们已经能一笔一划或者使用Graphic来画咱们所须要的东西了,要画什么要显示什么都由咱们本身控制。
这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。两种的主要是区别就是能够在SurfaceView中定义一个专门的线程来完成画图工做,应用程序不须要等待View的刷图,提升性能。前面一种适合处理量比较小,帧率比较小的动画,好比说象棋游戏之类的;然后一种主要用在游戏,高品质动画方面的画图。
方法 | 说明 | 代码例子 |
设置ARGB、颜色填充画布 | public void drawARGB(int a, int r, int g, int b) {} public void drawColor(int color) {} public void drawRGB(int r, int g, int b) {} |
canvas.drawARGB(50, 255, 0, 0);//参数即为ARGB的值 |
画点 | public native void drawPoint(float x, float y, Paint paint); | //参数比较明显,就是点的坐标,须要注意的是,在绘制点以前,须要设置画笔的宽度,不然不能画出来 paint.setStrokeWidth(13); //另外,还能够设置画笔的样式,来指定所画的点的样式,圆形仍是方形 paint.setStrokeCap(Paint.Cap.ROUND);//或者paint.setStrokeCap(Paint.Cap.BUTT); canvas.drawPoint(100, 100, paint); |
画直线 | public void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) {} | canvas.drawLine(100, 100, 500, 500, paint);//参数为起点和终点的XY坐标 |
画圆 | public void drawCircle(float cx, float cy, float radius, Paint paint) {} | canvas.drawCircle(200, 200, 100, paint);//参数为圆心坐标和半径 |
绘制矩形 | public void drawRect(float left, float top, float right, float bottom, Paint paint) {} public void drawRect(RectF rect, Paint paint) {} public void drawRect(Rect r, Paint paint) {} |
// RectF 和 Rect 均可用来定义一个矩形区域,主要区别是参数类型不一样,一个是int类型,一个是float类型 private RectF mRectF; mRectF = new RectF(100, 100, 200, 500); canvas.drawRect(mRectF, paint); |
绘制圆角矩形 | public void drawRoundRect(RectF rect, float rx, float ry, Paint paint) {} | private RectF mRectF; mRectF = new RectF(100, 100, 500, 500);//定义一个区域 canvas.drawRoundRect(mRectF, 20, 50, paint); //第2、三个参数分别定义x和y方向的圆角弧度 |
绘制一个区域的内切圆或椭圆(视所定义的矩形而定) | public void drawOval(RectF oval, Paint paint) {} | private RectF mRectF; mRectF = new RectF(100, 100, 200, 500); canvas.drawOval(mRectF, paint); |
绘制弧形区域 | public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter,Paint paint) {} | private RectF mRectF; mRectF = new RectF(100, 100, 200, 200);//定义一个矩形区域 canvas.drawArc(mRectF, 0, 90, false, paint); //第二个参数为起始弧度,第三个为终止弧度,第四个为显示方式 |
绘制文本 | public void drawText(String text, float x, float y, Paint paint) {} public void drawText(char[] text, int index, int count, float x, float y, Paint paint) {} public void drawText(String text, int start, int end, float x, float y, Paint paint) {} |
canvas.drawText("hwgt", 100, 100, paint); canvas.drawText(new char [] {'h','w','g','t','3','1','3','3'}, 2, 3, 100, 100, paint); canvas.drawText("hwgt3133", 2, 4, 100, 100, paint); //含头不含尾 |
按照指定点的坐标绘制文本 | public void drawPosText(String text, float[] pos, Paint paint) {} public void drawPosText(char[] text, int index, int count, float[] pos, Paint paint) {} |
canvas.drawPosText("hwgt", new float[]{50.0f,50.0f,100.0f,100.0f,250.0f,250.0f,500.0f,500.0f,}, paint); canvas.drawPosText(new char[]{'h','w','g','t'}, 3, 1, new float[]{50.0f,50.0f,100.0f,100.0f,250.0f,250.0f,500.0f,500.0f,}, paint); //推荐使用第二个方法,if (index < 0 || index + count > text.length || count*2 > pos.length),就会报错 |
按照指定的路径绘制文本 | public void drawTextOnPath(String text, Path path, float hOffset, float vOffset, Paint paint) {} |
该方法做用是抗锯齿,什么意思呢,咱们看下效果图,就知道了
左边是没有设置抗锯齿的,右边是设置了抗锯齿的,边界明显变模糊了。
该方法是设置防抖动。
咱们先看下没有设置防抖动的绘制出来的图
而后咱们看下设置了防抖动的绘制出来的图
第二个是否是比第一个图柔和点,这就是防抖动的效果。
该方法是绘制矩形
new Rect(150, 75, 260, 120)
这个构造方法须要四个参数这四个参数 指明了什么位置 ?咱们就来解释怎么画 这个 矩形
这四个 参数 分别表明的意思是:left top right bottom 上下左右呗。啊,不是 是 左 上 右 下。 下面给你们解释
left : 矩形左边的X坐标 150 ---->图片中的A点
top: 矩形顶部的Y坐标 75 ---->图片中的B点
right : 矩形右边的X坐标 260 ----->图片中的C点
bottom: 矩形底部的Y坐标 120 ------->图片中的D点
说白了就是左上角的坐标是(150,75),右下角的坐标是(260,120),这样就好理解了
public void drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
关于圆弧起始角度的解释:
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); canvas.drawArc(mRectF, 0, 90, false, mPaint); mPaint.setColor(Color.RED); canvas.drawArc(mRectF, 90, 90, false, mPaint); mPaint.setColor(Color.YELLOW); canvas.drawArc(mRectF, 180, 90, false, mPaint); mPaint.setColor(Color.GRAY); canvas.drawArc(mRectF, 270, 90, false, mPaint); canvas.drawRect(mRectF,mPaint2); }
效果以下图所示:
关于useCenter经过下面来进行描述:
参考地址:
http://www.cnblogs.com/hwgt/p/5416866.html
http://blog.csdn.net/rhljiayou/article/details/7212620/
一、android绘图Paint.setAnitAlias()和Paint.setDither()方法的做用
http://blog.csdn.net/lovexieyuan520/article/details/50732023
二、Android Paint setAntiAlias
http://blog.csdn.net/shichaosong/article/details/21157751
三、关于Rect参数解释的比较好的文章
http://blog.csdn.net/chengyingzhilian/article/details/7452082
四、关于drawArc方法解释参考的文章
http://blog.sina.com.cn/s/blog_783ede0301012im3.html
http://blog.csdn.net/senyangs/article/details/44240307