Android实现 画几何图形总结

20 篇文章 0 订阅
15 篇文章 0 订阅

一、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坐标值

Yy坐标值

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();                 //设置画笔的ARGB

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);

注意:如果需要绘制一个封闭的多边形,则将最后一点的坐标设置为起始点坐标即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值