Android绘图基础

来源:互联网 发布:网络订的机票怎么取 编辑:程序博客网 时间:2024/06/04 00:27

类似于Swing编程,在Android实现绘图需要集继承View组件,并重写他的onDraw(Canvas canvas)方法。

关于自定义View组件的方式请查看APIhttp://developer.android.com/reference/android/view/View.html 这里详细列出了自定义可以重写的方法以及每个方法的用处。由于我们这里主要谈论的是绘图,所以我们重写onDraw方法即可。

onDraw(Canvas canvas) 中的Canvas API 这个对象代表依附于指定View的画布,它提供了大量的方法绘制图形以及坐标变换。

http://developer.android.com/reference/android/graphics/Canvas.html具体的方法 请查看API


这里还有两个API:Paint,它代表Canvas的画笔,因此Pain类主要用于设置画笔的风格。Path代表任意多条直线连接而成的任意图形,可以用Path来绘制各种形状。

http://developer.android.com/reference/android/graphics/Paint.html 


下面示范一下绘制各种基本的图形,通过自定义一个View组件

/*** <p>Title: MyView.java</p>* <p>Description: </p>* <p>Copyright: Copyright (c) 2013</p>* <p>Company: 卓越软件</p>* @author cuihaifeng* @date 2013-11-14* @version 1.0*/package com.example.canvastest;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.LinearGradient;import android.graphics.Paint;import android.graphics.Path;import android.graphics.RectF;import android.graphics.Shader;import android.util.AttributeSet;import android.view.View;/** * <p>Title: MyView</p> * <p>Description: Android 绘图基础</p> * <p>Company: 卓越软件</p>  * @author    cuihaifeng * @date       2013-11-14 */public class MyView extends View {public MyView(Context context) {super(context);}public MyView(Context context,AttributeSet set){super(context, set);}/* (非 Javadoc)* <p>Title: draw</p>* <p>Description:实现绘图 </p>* @param canvas* @see android.view.View#draw(android.graphics.Canvas)*/@Overridepublic void draw(Canvas canvas) {super.draw(canvas);//将整张画布绘制成白色canvas.drawColor(Color.WHITE);//画笔Paint p = new Paint() ;//去锯齿p.setAntiAlias(true);//设置画笔颜色p.setColor(Color.BLUE);//设置填充风格p.setStyle(Paint.Style.STROKE);//设置画笔的笔触宽度p.setStrokeWidth(3);//绘制圆形canvas.drawCircle(40, 40, 30, p);//绘制正方形canvas.drawRect(10, 80, 70, 140, p);//绘制矩形canvas.drawRect(10, 150, 70, 190, p);RectF rel = new RectF(10, 200, 70, 230);//绘制圆角矩形canvas.drawRoundRect(rel, 5, 5, p);//绘制椭圆canvas.drawOval(new RectF(10, 240, 70, 270), p);//定义一个Path对象,封闭成一个三角形Path path = new Path();path.moveTo(10, 340);path.lineTo(70, 340);path.lineTo(40, 290);path.close();canvas.drawPath(path, p);//定义一个Path对象,封闭成一个五角形Path path1 = new Path();path1.moveTo(100, 240);path1.lineTo(80, 270);// 20,30path1.lineTo(50, 270);// 30,0path1.lineTo(80, 290);//10,20path1.lineTo(70, 320);//10,40path1.lineTo(100, 300);//30,10path1.lineTo(130, 320);path1.lineTo(120, 290);path1.lineTo(150, 270);path1.lineTo(120, 270);path1.close();p.setStyle(Paint.Style.FILL);p.setColor(Color.YELLOW);canvas.drawPath(path1, p);/************渐变**************************///为Paint设置渐变器Shader mShader = new LinearGradient(0, 0, 40, 60, new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW}, null, Shader.TileMode.REPEAT);p.setShader(mShader);//设置阴影p.setShadowLayer(45, 10, 10, Color.GRAY);//绘制圆形canvas.drawCircle(200, 40, 30, p);//绘制矩形canvas.drawRect(170, 80,230,140,p);Path path2 = new Path();path2.moveTo(200, 240);path2.lineTo(180, 270);// 20,30path2.lineTo(150, 270);// 30,0path2.lineTo(180, 290);//10,20path2.lineTo(170, 320);//10,40path2.lineTo(200, 300);//30,10path2.lineTo(230, 320);path2.lineTo(220, 290);path2.lineTo(250, 270);path2.lineTo(220, 270);path2.close();canvas.drawPath(path2, p);}}