搜索
您的当前位置:首页正文

Android 中Canvas的使用

来源:吉趣旅游网

一.Canvas类:

 The Canvas Class holds the "draw" call. To draw something .you need 4 basic component .A Bitmap to hlod the pixels, a Canvas to host the draw calls(writing into the Bitmap) . a drawing  primitive (e.g. Rect, Path, text, Bitmap), and a paint (to describe the colors and styles for the drawing). 

这个类相当于一个画布,你可以在里面画很多东西;

我们可以把这个Canvas理解成系统提供给我们的一块内存区域(但实际上它只是一套画图的API,真正的内存是下面的Bitmap),而且它还提供了一整套对这个内存区域进行操作的方法,所有的这些操作都是画图API。也就是说在这种方式下我们已经能一笔一划或者使用Graphic来画我们所需要的东西了,要画什么要显示什么都由我们自己控制。

这种方式根据环境还分为两种:一种就是使用普通View的canvas画图,还有一种就是使用专门的SurfaceView的canvas来画图。两种的主要是区别就是可以在SurfaceView中定义一个专门的线程来完成画图工作,应用程序不需要等待View的刷图,提高性能。前面一种适合处理量比较小,帧率比较小的动画,比如说象棋游戏之类的;而后一种主要用在游戏,高品质动画方面的画图。

二. Paint类:

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)  // 设置下划线


三.有了以上的概念,我们用canvas来绘出一些常见的图案(圆,矩形,线条,各类多边形,点,曲线,扇形等)

1. Test:

 canvas.drawText("画圆:"1020, p);//描绘的文字,start x, start y


2 Circle:

canvas.drawCircle(602010, p);// center x, center y ,radius


3 Line:

canvas.drawLine(1104019080, p);//start x,start y,end x,end y


4.弧线:

p.setStyle(Paint.Style.STROKE);//设置空心  

RectF oval1=new RectF(150,20,180,40);  //左上角坐标和右下角坐标的矩形

canvas.drawArc(oval1, 180180false, p);//绘园的矩形框,start angle(0时为水平x轴方向),sweep angle(顺时针),flase:只会画出弧线 true:会画出圆心和边框(因为设置了paint为空心,否则会分别画出一个扇形,和一个起始点到终点的形状)


扇形

/* 设置渐变色 这个正方形的颜色是改变的 */  

Shader mShader = new LinearGradient(00100100,  

new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW,  

Color.LTGRAY }, null, Shader.TileMode.REPEAT); // 一个材质,打造出一个线性梯度沿著一条线。  

p.setShader(mShader);  

RectF oval2 = new RectF(60100200240);// 设置个新的正方形  

canvas.drawArc(oval2, 200130true, p);  


椭圆

RectF oval2 = new RectF(60100200240);// 设置个新的长方形(把正方形压扁成长方形)  

canvas.drawArc(oval2, 200130true, p); 


5.rectangle:

canvas.drawRect(60608080, p);//左上右下的xy


6.polygon:

Path类封装复合(多轮廓几何图形的路径,由直线段、二次曲线,和三次方曲线。drawPath(路径、paint).

 

Path path = new Path();  

path.moveTo(80200);// 多边形起点的x,y 

path.lineTo(120250); //第二个点的x,y

path.lineTo(80250);  //第三个点的x,y

path.close(); // 使这些点构成封闭的多边形  

canvas.drawPath(path, p);

  

7.point:

canvas.drawPoint(60390, p);//画一个点x,y

canvas.drawPoints(new float[]{60,400,65,400,70,400}, p);//画多个点  


8.drawable:     

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

canvas.drawBitmap(bitmap, 250,360, p); //左上角x,y











因篇幅问题不能全部显示,请点此查看更多更全内容

Top