您的位置:首页 > 移动开发 > Android开发

Android中Canvas的常用方法

2016-05-26 16:50 435 查看
所有View在UI上绘制全部是由Canvas实现的。
一. save(),restore() 保存和还原

这两个方法并不是用来对图形进行处理的(移动,旋转,缩放)。但却是绘制复杂图形必不可少的方法。

<textarea cols="10" rows="3" name="code" class="java">save();</textarea>

方法作用:用来保存canvas状态的。

<textarea cols="11" rows="1" name="code" class="c-sharp">restore();</textarea>

方法作用:用来恢复canvas状态的,还原到上一次savie()时的状态。

save()时可以得到一个返回值,是用来确定保存时间的。使用restoreToCount()方法时可以把此值当参数传递,可以还原到指定的保存时间。

二. translate() 位移

<textarea cols="32" rows="1" name="code" class="java">translate(float dx, float dy);</textarea>

方法作用:移动canvas和它的原点到不同的位置上。默认原点坐标为(0,0)

参数:

dx,左右偏移量(正数是向右移动)

dy,上下偏移量(正数是向下移动)

三. rotate() 旋转

<textarea cols="22" rows="1" name="code" class="java">rotate(float degrees);</textarea>

方法作用:以原点为中心对canvas旋转。默认原点坐标为(0,0)

degrees,旋转角度

<textarea cols="43" rows="1" name="code" class="java">rotate(float degrees, float px, float py);</textarea>

方法作用:以px,py为中心对canvas旋转

degrees,旋转角度

px,设置旋转中心的横坐标(正数是向右移动)

py,设置旋转中心的竖坐标(正数是向下移动)

四. scale() 缩放

<textarea cols="27" rows="1" name="code" class="java">scale(float sx, float sy);</textarea>

方法作用:增减图形在canvas中的像素数目,对形状,位图进行缩小或者放大。

参数:

sx,横轴缩放大小

sy,数轴缩放大小

<textarea cols="46" rows="1" name="code" class="c-sharp">scale(float sx, float sy, float px, float py);</textarea>

方法作用:增减图形在canvas中的像素数目,对形状,位图进行缩小或者放大。

参数:

sx,横轴缩放大小

sy,数轴缩放大小

px,设置原点的位置(与rotate中的px正好相反,正数是向左移动)

py,设置原点的位置(与rotate中的py正好相反,正数是向上移动)

在测试scale(sx, sy, px, py)方法时,一直在用正数测试,结果发现图形一直没有出现在屏幕上,浪费了好长时间,郁闷。目前还不清楚为什么这个方法中的px和py是这么设置的。

//----------------------------------------------------------------------------------------

Paint 代表了Canvas上的画笔、画刷、颜料等等;

Paint类常用方法:

setARGB(int a, int r, int g, int b) // 设置 Paint对象颜色,参数一为alpha透明值

setAlpha(int a) // 设置alpha不透明度,范围为0~255

setAntiAlias(boolean aa) // 是否抗锯齿

setColor(int color) // 设置颜色,这里Android内部定义的有Color类包含了一些常见颜色定义

setTextScaleX(float scaleX) // 设置文本缩放倍数,1.0f为原始

setTextSize(float textSize) // 设置字体大小

setUnderlineText(booleanunderlineText) // 设置下划线

// 1、将会以颜色ARBG填充整个控件的Canvas背景

//mCanvas.drawARGB(122, 10, 159, 163) ;

// 2、将会以颜色ARBG填充整个控件的Canvas背景

//mCanvas.drawColor(Color.BLUE) ;

// 3、绘制颜色,但是要制定一个mode

//mCanvas.drawColor(Color.BLUE, Mode.SCREEN) ;

// 4、画背景,跟2等效

//mCanvas.drawPaint(mPaint) ;

// 5、画一个点

//mCanvas.drawPoint(23, 23, mPaint) ;

// 6、画很多点这里的float[] 表示{x0,y0,x1,y1,x2,y2,x3,y3.....}

//mCanvas.drawPoints(new float[]{10,11,10,12,10,13,10,14,10,15,10,16}, mPaint) ;

// 7、画线

//mCanvas.drawLine(...) ;

// 8、画长方形 Rect 和RectF的区别?

//精度不一样,Rect是使用int类型作为数值,RectF是使用float类型作为数值

//Rect r = new Rect(10,10,50,50) ;

//mCanvas.drawRect(r, mPaint) ;

//RectF rf = new RectF(10,10,50,50) ;

//mCanvas.drawRect(rf, mPaint) ;

//mCanvas.drawRect(10, 10, 50, 50, mPaint) ;

// 9、画椭圆 初始化RectF的参数是(left,top,right,bottom)

//RectF rf = new RectF(100,100 ,200 ,250) ;

//mCanvas.drawOval(rf, mPaint) ;

// 10、画圆 (圆心x0,圆心y0,半径,paint)

//mCanvas.drawCircle(100, 100, 50, mPaint) ;

// 11、画圆弧 RectF对象表明内切矩形的(left,top,right,bottom)

//RectF rf = new RectF(100 ,100 ,200 ,200) ;

// 参数(rf,startAngle ,angle ,sweepAngle ,paint) sweepAngle表明是否显示圆弧三角形 angle画多少度

//mCanvas.drawArc(rf, 60, 30, true, mPaint) ;

// 12、绘制圆角矩形 RectF是矩形的(left,top,right,bottom)

//RectF rf = new RectF(100 ,100 ,200 ,200) ;

// 50表明x方向的半径,20表示y方向的半径

//mCanvas.drawRoundRect(rf, 50, 20, mPaint) ;

// 13、画任意多边形

//Path path = new Path() ;

//path.moveTo(100, 100) ;

//path.lineTo(200, 200) ;

//path.lineTo(300, 200) ;

//mCanvas.drawPath(path, mPaint) ;

// 14、通过Path对象,也可以画其他的图形

//Path path = new Path() ;

//path.addCircle(100, 100, 20, Path.Direction.CCW) ;

//mCanvas.drawPath(path ,mPaint);

/*drawBitmap

drawText

drawPicture*/

/*Rect r = new Rect(100,100,200,200) ;

ByteArrayOutputStream out = new ByteArrayOutputStream();

Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg) ;

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out) ;

InputStream in = new ByteArrayInputStream(out.toByteArray()) ;

*/

/*Picture picture = Picture.createFromStream(mContext.getResources().openRawResource(R.raw.bg)) ;

mCanvas.drawPicture(picture) ;*/

// 15、画bitmap对象

//mCanvas.drawBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg),100, 100, mPaint) ;

// 16、Matrix中包含了对Bitmap的处理操作

/*Matrix m = new Matrix() ;

m.postScale(2, 2) ;

m.postRotate(60) ;

mCanvas.drawBitmap(BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg), m, mPaint) ;*/

// 17、画带Matrix参数的bitmap,经过Matrix对象可以对bitmap做相关的处理,比如旋转,缩放,移动等《关于Matrix的使用另行总结》

/*Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.bg) ;

Matrix m = new Matrix() ;

m.postScale(2, 2) ;

m.postRotate(60) ;

m.postTranslate(300, 300) ;

mCanvas.drawBitmap(bitmap, m, mPaint) ;*/

//mCanvas.drawBitmap(....) ; 暂不总结

// 18、画文字

//mCanvas.drawText(123, 10, 10, mPaint) ;

//mCanvas.drawText(....) ; 暂不总结
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: