一.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("画圆:", 10, 20, p);//描绘的文字,start x, start y
2 Circle:
canvas.drawCircle(60, 20, 10, p);// center x, center y ,radius
3 Line:
canvas.drawLine(110, 40, 190, 80, 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, 180, 180, false, p);//绘园的矩形框,start angle(0时为水平x轴方向),sweep angle(顺时针),flase:只会画出弧线 true:会画出圆心和边框(因为设置了paint为空心,否则会分别画出一个扇形,和一个起始点到终点的形状)
扇形
/* 设置渐变色 这个正方形的颜色是改变的 */
Shader mShader = new LinearGradient(0, 0, 100, 100,
new int[] { Color.RED, Color.GREEN, Color.BLUE, Color.YELLOW,
Color.LTGRAY }, null, Shader.TileMode.REPEAT); // 一个材质,打造出一个线性梯度沿著一条线。
p.setShader(mShader);
RectF oval2 = new RectF(60, 100, 200, 240);// 设置个新的正方形
canvas.drawArc(oval2, 200, 130, true, p);
椭圆
RectF oval2 = new RectF(60, 100, 200, 240);// 设置个新的长方形(把正方形压扁成长方形)
canvas.drawArc(oval2, 200, 130, true, p);
5.rectangle:
canvas.drawRect(60, 60, 80, 80, p);//左上右下的xy
6.polygon:
Path类封装复合(多轮廓几何图形的路径,由直线段、二次曲线,和三次方曲线。drawPath(路径、paint).
Path path = new Path();
path.moveTo(80, 200);// 多边形起点的x,y
path.lineTo(120, 250); //第二个点的x,y
path.lineTo(80, 250); //第三个点的x,y
path.close(); // 使这些点构成封闭的多边形
canvas.drawPath(path, p);
7.point:
canvas.drawPoint(60, 390, 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
因篇幅问题不能全部显示,请点此查看更多更全内容