一、Android graphics中包括了Canvas(画布)、Paint(画笔)、Color(颜色)、Bitmap(图像)等常用的类。graphics具有绘制点、线、颜色、2D几何图形、图像处理等功能。
1、 Canvas类的使用,Canvas类就是表示一块画布,你可以在上面画 你想画的东西。主要有以下方法:
l Canvas():创建一个空的画布
l Canvas(Bitmap bitmap):以bitmap对象创建一个画布,则将内容都绘制在bitmap上,bitmap不得为null;
l Canvas(GL gl):在绘制3D效果时使用,与OpenGL有关;
l drawColor:设置画布的背景色;
canvas.drawColor(Color.BLACK); //黑色背景
l setBitmap:设置具体的画布;
l clipRect:设置显示区域,即设置裁剪区
l isOpaque:检测是否支持透明;
l rotate:旋转画布;
(1)绘制直线:canvas.drawLine(float startX, float startY, float stopX, float stopY, Paint paint);
startX:起始端点的X坐标。
startY:起始端点的Y坐标。
stopX:终止端点的X坐标。
stopY:终止端点的Y坐标。
paint:绘制直线所使用的画笔。
canvas.drawLine(60, 40, 100, 40, p);// 画线
canvas.drawLine(110, 40, 190, 80, p);// 斜线
(2)绘制矩形:canvas.drawRect(float left, float top, float right, float bottom, Paint paint);
left:矩形的左边位置。
top:矩形的上边位置。
right:矩形的右边位置。
bottom:矩形的下边位置。
paint:绘制时所使用的画笔。
canvas.drawRect(400, 90, 500, 209, p);// 长方形
canvas.drawRect(60, 60, 80, 80, p);// 正方形
注意:同时满足Left
(3)绘制圆形:canvas.drawCircle(float cx, float cy, float radius, Paint paint);
参数说明
cx:圆心的x坐标。
cy:圆心的y坐标。
radius:圆的半径。
paint:绘制时所使用的画笔。
canvas.drawCircle(330, 70, 60, p);// 圆
(4)绘制字符:canvas.drawText(String text, float x, float y, Paint paint);
Text:显示的文本内容
X:x坐标值
Y:y坐标值
Paint:绘制时所使用的画笔。
canvas.drawText("画扇形和椭圆:", 500, 20, p); //在坐标x,y(500,20)处显示“画扇形和椭圆”
注意:字体的样式会被setStyle(),setTextSize()影响
(5)绘制图形:canvas.drawBirmap(Bitmap bitmap, float left, float top, Paint paint);
(6)绘制多个点:canvas.drawPoints (float[] pts, Paint paint)
pts:绘制端点的数组,每个端点占用两个数据。
Paint:绘制时所使用的画笔。
canvas.drawPoints(new float[]{60, 90, 65, 90, 70, 90}, p);//画3个点
(7)绘制弧形:drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)
oval :指定圆弧的外轮廓矩形区域,弧形在这个定义的矩形内活动,若果定义一个长方形可以在里面画一个椭圆,正方形可以画一个圆
startAngle: 圆弧起始角度,单位为度,矩形的右边棱的中心(如右边棱长为10则起始点为5处开始画)
sweepAngle: 圆弧扫过的角度,顺时针方向。
useCenter: 如果为True时,在绘制圆弧时将圆心包括在内,通常用来绘制扇形。
paint: 绘制时所使用的画笔。
RectF oval1=new RectF(550,80,680,180); //设定一个长方形
canvas.drawRect(oval1, p);//在本矩形中进行画弧形的
canvas.drawArc(oval1, 0, 180, false, p);//从0度开始画一个180度的弧形
canvas.drawArc(oval0, 270, 50, true, p);//从270度开始画一个50度带有中心线的弧形
(8)绘制椭圆形:drawOval (RectF oval, Paint paint)
oval :指定圆弧的外轮廓矩形区域,弧形在这个定义的矩形内活动,若果定义一个长方形 可以在里面画一个椭圆,正方形可以画一个圆
paint: 绘制时所使用的画笔。
RectF oval1=new RectF(550,80,680,180); //设定一个长方形
canvas.drawOval(oval1, p); //在长方形中画椭圆形
Oval1.set(300,300,550,550); //把oval2重新设定一个新正方形
canvas.drawOval(oval1, p); //在正方形中画圆形
2、Android graphics: Paint(画笔)类使用,Pain类的常用属性设置方法如下:
setAntiAlias(); //设置画笔的锯齿效果
p.setAntiAlias(true); //外圈无锯齿,比较光滑 p.setAntiAlias(false) //效果与true相反
setColor(); //设置画笔的颜色
p.setColor(Color.GREEN);// 设置绿色 注意区分大小写
setARGB(); //设置画笔的A、R、G、B值
setAlpha(int a); //设置画笔的透明度
a取值范围为0~255,数值越小越透明
setTextSize(); //设置字体的尺寸
paint.setTextSize(15)
setStyle(); //设置画笔的风格(空心或实心)
paint.setStyle(Panit.Style.STROKE); //空心
paint.setStyle(Panit.Style.FILL); //实心
setStrokeWidth(); //设置线宽度
paint.setStrokeWidth((float) 3.0); //线宽
getColor(); //获取画笔的颜色
p.setColor(Color.RED);// 设置红色
3、 Shader类的使用:Android中提供了Shader类专门用来渲染图像以及一些几何图形。
Shader下面包括几个直接子类,分别是BitmapShader、 ComposeShader、LinearGradient、RadialGradient、SweepGradient。
l BitmapShader主要用来渲染图像
l LinearGradient 用来进行梯度渲染
l RadialGradient 用来进行环形渲染
l SweepGradient 用来进行梯度渲染
l ComposeShader则是一个 混合渲染
Shader类的使用,都需要先构建Shader对象,然后通过Paint的setShader方法设置渲染对象,然后设置渲染对象,然后再绘制时使用这个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);//创建一个LinearGrasient类型
p.setShader(mShader);
LinearGradient的作用是实现某一区域内颜色的线性渐变效果它有两个构造函数
(1)LinearGradient(float x0, float y0, float x1, float y1, int color0, int color1, Shader.TileMode tile)
参数x0表示渐变的起始点x坐标;参数y0表示渐变的起始点y坐标;参数x1表示渐变的终点x坐标;参数y1表示渐变的终点y坐标 ;color0表示渐变开始颜色;color1表示渐变结束颜色;参数tile表示平铺方式。
Shader.TileMode有3种参数可供选择,分别为CLAMP、REPEAT和MIRROR:
CLAMP的作用是如果渲染器超出原始边界范围,则会复制边缘颜色对超出范围的区域进行着色
REPEAT的作用是在横向和纵向上以平铺的形式重复渲染位图
MIRROR的作用是在横向和纵向上以镜像的方式重复渲染位图
(2)LinearGradient (float x0, float y0, float x1, float y1, int[] colors, float[] positions, Shader.TileMode tile);
参数x0表示渐变的起始点x坐标;参数y0表示渐变的起始点y坐标;参数x1表示渐变的终点x坐标;参数y1表示渐变的终点y坐标;参数colors表示渐变的颜色数组;参数positions用来指定颜色数组的相对位置;参数tile表示平铺方式。通常,参数positions设为null,表示颜色数组以斜坡线的形式均匀分布。
moveTo:不会进行绘制,只用于移动移动画笔
path2.moveTo(100, 320);//设置Path的起点(开始时将画笔移动到坐标100,320处)
quasTo:用于绘制圆滑曲线,即贝塞尔曲线
mPath.quadTo(x1, y1, x2, y2) (x1,y1) 为控制点,(x2,y2)为结束点。
同样地,我们还是得需要moveTo来协助控制。
Path.moveTo(100, 500);
Path.quadTo(300, 100, 600, 500);
canvas.drawPath(Path, Paint);
lineTo :用于进行直线绘制。
mPath.lineTo(300, 300);
canvas.drawPath(mPath, mPaint);
5、drawPath方法用法:绘制任意多边形
该方法用于在画布上绘制任意多边形,通过指定Path对象来实现。在Path对象中规划了多边形的路径信息。该方法是绘制任意多边形的主要方法,当然也可以使用drawLines方法来实现,但是drawPath方法更为灵活、方便。
drawPath (Path path, Paint paint)
path:包含路径信息的Path对象。
paint:绘制时所使用的画笔。
Path path1=new Path();
path1.moveTo(280, 300);
path1.lineTo(300, 300);
path1.lineTo(310, 310);
path1.lineTo(300, 320);
path1.lineTo(280, 320);
path1.lineTo(270, 310);
canvas.drawPath(path1, p);
注意:如果需要绘制一个封闭的多边形,则将最后一点的坐标设置为起始点坐标即可。