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

Android实现 画几何图形总结

2016-04-10 21:16 375 查看
一、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 <right , top <bottim,不然画不出来
(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,表示颜色数组以斜坡线的形式均匀分布。

4、moveTO,quadTo,lineTo用法;

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);
注意:如果需要绘制一个封闭的多边形,则将最后一点的坐标设置为起始点坐标即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: