Android绘图基础

类似于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)
	*/
	@Override
	public 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,30
		path1.lineTo(50, 270);// 30,0
		path1.lineTo(80, 290);//10,20
		path1.lineTo(70, 320);//10,40
		path1.lineTo(100, 300);//30,10
		path1.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,30
		path2.lineTo(150, 270);// 30,0
		path2.lineTo(180, 290);//10,20
		path2.lineTo(170, 320);//10,40
		path2.lineTo(200, 300);//30,10
		path2.lineTo(230, 320);
		path2.lineTo(220, 290);
		path2.lineTo(250, 270);
		path2.lineTo(220, 270);
		path2.close();
		canvas.drawPath(path2, p);
		
	}
}



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值