赞
踩
canvas.saveLayer(bounds, paint, saveFlags);
推荐文章:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html
二:Canvas的简单使用
有了上面对Canvas 方法的认识,那么下面我就用上面的方法来进行相关练习:
1.drawARGB(int a, int r, int g, int b)和drawColor(int color)
不用画笔,直接填充画板颜色
- @Override
- protected void onDraw(Canvas canvas) {
- super.onDraw(canvas);
- drawNomal(canvas);
- // drawTest(canvas);
-
- }
- /**
- * 常规绘制 以(0,0)作为坐标原点参考点
- * @param canvas
- */
- private void drawNomal(Canvas canvas){
- // 绘制画布背景
- canvas.drawColor(Color.GRAY);
- }
2.drawLine(float startX, float startY, float stopX, float stopY, Paint paint)
画线。
参数一:线的起始点的X坐标
参数二:线的起始点的Y坐标
参数三:线的结束点的X坐标
参数四:显得结束点的Y坐标
参数五:不说了
canvas.drawLine(50, 50, 450, 50, mPaint);
3.drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
画圆弧(顺时针):
第一个参数—固定一块矩形区域作为画圆弧的范围。以矩形中心作为圆心画弧线
第二个参数—起始弧角度
第三个参数—画过的角度 , 从起始角度顺时针转过的角度画弧
第四个参数—是否画出半径区域,true画出来的是一个区域块,false画出来的是一个弧线。
第五个参数—画笔
- mPaint.setStyle(Paint.Style.FILL);
- mPaint.setColor(Color.RED);
- //RectF(float left, float top, float right, float bottom)
- // RectF re1 = new RectF(0,300,800,500);
- // canvas.drawArc(re1, 0, 50, false, mPaint);
-
- RectF re2 = new RectF(0,300,800,500);
- canvas.drawArc(re2, 0, 50, true, mPaint);
4.drawCircle(float cx, float cy, float radius, Paint paint)
画圆,至于画的是实心圆还是圆圈,跟paint的Style属性有关。
参数一:圆心X坐标
参数二:圆心Y坐标
参数三:圆半径
参数四:这还用说么??!
- mPaint =new Paint();
- // 绘制画布背景
- canvas.drawColor(Color.WHITE);
- //设置画笔颜色
- mPaint.setColor(Color.RED);
- //设置画笔为空心 ,实心
- mPaint.setStyle(Paint.Style.FILL);
- // 画圆
- canvas.drawCircle(100, 500, 50, mPaint);
5.drawOval(RectF oval, Paint paint)
绘制一个区域的内切圆或内切椭圆(视所定义的矩形而定):
- RectF oval = new RectF(350, 500, 450, 700);
- // 画椭圆
- canvas.drawOval(oval, mPaint);
绘制路径。
参数一:
此类很简单,但是有几个注意点:
1.path的起始点的设置调用方法是 moveTo();如果没有调用此方法,则默认起始点为(0,0)
2.如果要连接起始点和终点,只需要调用path.closed();即可
3.连接两个点,使用path.lineTo();
参数二:画笔
- //设置Path路径
- mPaint.setStyle(Paint.Style.STROKE);
- mPaint.setColor(Color.GREEN);
- mPaint.setStrokeWidth(3);
- Path path = new Path();
- path.moveTo(200, 100);
- path.lineTo(620, 80);
- path.lineTo(420, 200);
- path.lineTo(300, 400);
- path.close();
- canvas.drawPath(path, mPaint);
7.drawTextOnPath(@NonNull String text, @NonNull Path path, float hOffset,float vOffset, @NonNull Paint paint)
该方法可以沿着Path路径绘制文本,其中text指文本内容,hOffset参数指定水平偏移、vOffset指定垂直偏移
- //设置Path路径
- mPaint.setStyle(Paint.Style.STROKE);
- mPaint.setColor(Color.GREEN);
- mPaint.setStrokeWidth(3);
- Path path = new Path();
- path.moveTo(200, 100);
- path.lineTo(620, 80);
- path.lineTo(420, 200);
- path.lineTo(300, 400);
- path.close();
- mPaint.setTextSize(46);
- canvas.drawPath(path, mPaint);
- //drawTextOnPath(@NonNull String text, @NonNull Path path, float hOffset,float vOffset, @NonNull Paint paint)
- //该方法可以沿着Path路径绘制文本,其中text指文本内容,hOffset参数指定水平偏移、vOffset指定垂直偏移
- canvas.drawTextOnPath("7qiuwoeruowoqjifasdkfjksjfiojio23ur8950", path, -10, -10, mPaint);
8.drawPoint(float x, float y, Paint paint)
画点。
需要注意的是,需要设置将画笔设置下 paint.setStrokeWidth(xxx);
当然也可以给点加点特效: paint.setStrokeCap(Paint.Cap.ROUND);//或者paint.setStrokeCap(Paint.Cap.BUTT);
设置画笔的样式,来指定所画的点的样式,圆形还是方形
9. drawText(String text, float x, float y, Paint paint)
按照指定坐标 绘制文本。float x和 float y表示 其实点的xy坐标
- drawText(char[] text, int index, int count, float x, float y, Paint paint)
- canvas.drawText("零一二三四五六七八九十".toCharArray(),1,3,10,100,paint); 》》》 一二三
-
- drawText(CharSequence text, int start, int end, float x, float y, Paint paint)
- canvas.drawText("零一二三四五六七八九十",1,3,10,100,paint); 》》》 一二 含头不含尾
10.drawPicture(Picture picture, RectF dst) 和 drawBitmap(Bitmap bitmap, float left, float top, Paint paint) (本部分借鉴)
区别 : drawPicture(矢量图) 和 drawBitmap(位图)
参照:http://blog.csdn.net/u014005316/article/details/54891400
在绘制图形的过程中,会需要对画布进行旋转,缩放,平移等操作,但对画布进行比如平移操作之后,会对以后画上去的内容也产生影响,有时,我们只希望这种平移或是旋转操作只是临时作用于画布上的某些内容,这个时候就可以使用save和restore方法,save和restore方法一般是配对使用.
例如:
- canvas.drawText("00000000", 0, 20, paint);
- canvas.translate(200, 200);//将画布从(0,0)移动一段距离到(200,200)
- canvas.drawText("——2223233———", 0, 20, paint);
- canvas.drawText("00000000", 0, 20, paint);
- canvas.save();
- canvas.translate(200, 200);
- canvas.restore();
- canvas.drawText("——2223233———", 0, 20, paint);
- }
save()在画布移动前调用和restore()方法在画布移动之后调用,这样 画布中的内容才不会跟随画布移动。
11。位置转换方法,canvas.rorate和canvas.translate: 这个是我找的,个人比较感兴趣
- @Override
- protected void onDraw(Canvas canvas) {
- Paint paint = new Paint();
- canvas.drawColor(Color.BLACK);
- paint.setColor(Color.YELLOW);
- paint.setStrokeJoin(Paint.Join.ROUND);
- paint.setStrokeCap(Paint.Cap.ROUND);
- paint.setStrokeWidth(3);
- paint.setAntiAlias(true);
- paint.setStyle(Paint.Style.STROKE);
- canvas.translate(500, 500); //将位置移动画纸的坐标点:150,150// 原点坐标 (500,500)
- canvas.drawCircle(0, 0, 200, paint); //画圆圈(半径200) 大圆
-
- //使用path绘制路径文字
- canvas.save();
- canvas.translate(-100, -165);
- Path path = new Path();
- // TODO: 2017/6/6
- path.addArc(new RectF(0,0,220,130), -210, 240);
- Paint citePaint = new Paint(paint);
- citePaint.setTextSize(40);
- citePaint.setStrokeWidth(1);
- //drawTextOnPath(@NonNull String text, @NonNull Path path, float hOffset,float vOffset, @NonNull Paint paint)
- //该方法可以沿着Path路径绘制文本,其中text指文本内容,hOffset参数指定水平偏移、vOffset指定垂直偏移
- canvas.drawTextOnPath("我爱学习Android", path, 28, 3, citePaint);
- canvas.restore();
-
- //刻度和数字
- Paint tmpPaint = new Paint(paint); //小刻度画笔对象
- tmpPaint.setTextSize(25);//1234 数字大小
- tmpPaint.setStrokeWidth(1);
-
- float y=200;//刻度圆半径
- int count = 60; //总刻度数
-
- for(int i=0 ; i <count ; i++){
- if(i%5 == 0){
- canvas.drawLine(0f, y, 0, y+18f, paint);//大刻度
- canvas.drawText(String.valueOf(i/5+1), -10f, y+44f, tmpPaint);//123456789 10 11 12
-
- }else{
- canvas.drawLine(0f, y, 0f, y +12f, tmpPaint);//小刻度
- }
- canvas.rotate(360/count,0f,0f); //旋转画纸
- }
-
- //绘制指针
- tmpPaint.setColor(Color.GRAY);
- tmpPaint.setStrokeWidth(4);
- canvas.drawCircle(0, 0, 10, tmpPaint);
- tmpPaint.setStyle(Paint.Style.FILL);
- tmpPaint.setColor(Color.RED);
- canvas.drawCircle(0, 0, 6, tmpPaint);
- canvas.drawLine(0, 20, 0, -150, paint);
-
- }
详细请参考:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1212/703.html
http://blog.csdn.net/sinat_26710701/article/details/70158696
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。