android游戏开发中图形绘制:Canvas和Paint的使用

android游戏开发中,使用android.graphics中的类来绘制2D向量图和文字。

一 画布Canvas

在Android中的绘图应该继承View组件,并重写它的onDraw(Canvas canvas)方法。

Canvas代表指定View上的画布,常用方法如图:

二 画刷Paint

Paint代表Canvas上的画刷,主要用于绘制风格,包括画刷颜色、画刷笔触粗细、填充风格等。

大体上可以分为两类,一类与图形绘制相关,一类与文本绘制相关。

常用方法如图:

三 路径Path

Path表示在Canvas上绘制的路径,可以是任意多条直线连接而成的任意图形。

四 示例

protected void onDraw(Canvas canvas) {
	super.onDraw(canvas);
	// 把整张画布绘制成白色
    canvas.drawColor(Color.WHITE);

    // 创建一个画刷
    Paint paint = new Paint(); 

    // 设置画刷属性
    paint.setAntiAlias(true);			// 去锯齿
    paint.setColor(Color.RED);			// 设置画刷颜色为红色
    paint.setStyle(Paint.Style.STROKE);	// 设置画刷样式为空心
    paint.setStrokeWidth(3);			// 设置paint的外框宽度

    // 画一个空心圆形
    canvas.drawCircle(40, 40, 30, paint);

    // 画一个空心正方形
    canvas.drawRect(10, 90, 70, 150, paint);
    // 画一个空心长方形
	canvas.drawRect(10, 170, 70,200, paint);

    // 画一个空心椭圆形
    RectF re=new RectF(10,220,70,250);
    canvas.drawOval(re, paint);

    // 画一个空心三角形
    Path path=new Path();
	path.moveTo(10, 330);
	path.lineTo(70,330);
	path.lineTo(40,270);
	path.close();
	canvas.drawPath(path, paint);

	// 画一个空心梯形
	Path path1=new Path();
	path1.moveTo(10, 410);
	path1.lineTo(70,410);
	path1.lineTo(55,350);
	path1.lineTo(25, 350);
	path1.close();
	canvas.drawPath(path1, paint);

    // 修改画刷属性
	paint.setStyle(Paint.Style.FILL);	// 设置画刷样式为实心
	paint.setColor(Color.BLUE);			// 设置画刷颜色

	// 画一个实心圆
	canvas.drawCircle(120,40,30, paint);

	// 画一个实心正方形
	canvas.drawRect(90, 90, 150, 150, paint);

	// 画一个实心长方形
	canvas.drawRect(90, 170, 150,200, paint);

	// 画一个实心椭圆
	RectF re2=new RectF(90,220,150,250);
	canvas.drawOval(re2, paint);

	// 画一个实心三角形
	Path path2=new Path();
	path2.moveTo(90, 330);
	path2.lineTo(150,330);
	path2.lineTo(120,270);
	path2.close();
	canvas.drawPath(path2, paint);

	// 画一个实心梯形
	Path path3=new Path();
	path3.moveTo(90, 410);
	path3.lineTo(150,410);
	path3.lineTo(135,350);
	path3.lineTo(105, 350);
	path3.close();
	canvas.drawPath(path3, paint);

	// 设置渐变色
	Shader mShader=new LinearGradient(0,0,100,100,
	      new int[]{Color.RED,Color.GREEN,Color.BLUE,Color.YELLOW},
	      null,Shader.TileMode.REPEAT);
	paint.setShader(mShader);

	// 画一个渐变色圆
	canvas.drawCircle(200,40,30, paint);

	// 画一个渐变色正方形
	canvas.drawRect(170, 90, 230, 150, paint);

	// 画一个渐变色长方形
	canvas.drawRect(170, 170, 230,200, paint);

	// 画一个渐变色椭圆
	RectF re3=new RectF(170,220,230,250);
	canvas.drawOval(re3, paint);

	// 画一个渐变色三角形
	Path path4=new Path();
	path4.moveTo(170,330);
	path4.lineTo(230,330);
	path4.lineTo(200,270);
	path4.close();
	canvas.drawPath(path4, paint);

	// 画一个渐变色梯形
	Path path5=new Path();
	path5.moveTo(170, 410);
	path5.lineTo(230,410);
	path5.lineTo(215,350);
	path5.lineTo(185, 350);
	path5.close();
	canvas.drawPath(path5, paint);

	// 绘制文字
	paint.setTextSize(24);	// 设置字号
	canvas.drawText(getResources().getString(R.string.str_text1), 240, 50, paint);
	canvas.drawText(getResources().getString(R.string.str_text2), 240, 120, paint);
	canvas.drawText(getResources().getString(R.string.str_text3), 240, 190, paint);
	canvas.drawText(getResources().getString(R.string.str_text4), 240, 250, paint);
	canvas.drawText(getResources().getString(R.string.str_text5), 240, 320, paint);
	canvas.drawText(getResources().getString(R.string.str_text6), 240, 390, paint);
}

四 效果图

参考文章:

http://www.cnblogs.com/stulife/archive/2010/08/19/1803313.html

http://www.cnblogs.com/-oyk/archive/2011/10/25/2223624.html

http://blog.csdn.net/u010142437/article/details/9200465

时间: 2024-08-04 01:38:32

android游戏开发中图形绘制:Canvas和Paint的使用的相关文章

Android游戏开发中如何将两个图标交换位置

Android 游戏界面中有时候因为布局的美观,需要将两个图标交换位置.这两个图标不是简单地更改id号就可以的,下面是交换两个图标的方法. 原代码中相关程序: 未修改前: float pic_x=200;float pic_y=130; 需要修改的第一部分程序,这一部分利用定义pic_x,pic_y的将图标绘制在相应的界面位置中. 第一个图标位置绘图 if(backmusicFlag01)        {                      canvas.drawBitmap(backM

Android应用开发:图形绘制之硬件加速

引言 在Android3.0后,Android的2D渲染通道开始支持硬件加速,也就是说所有View的Canvas绘画动作都会使用GPU,同时也代表着应用程序会损耗更多的内存.而在Android4.0(API14)之后硬件加速功能就被默认开启了.如果你的应用程序是由各种标准View和Drawable组成的,那么硬件加速并不会引起任何不适.众所周知,使用硬件加速会调用到OpenGL,但是OpenGL不同版本会存在不支持一些操作的情况,也就是说,硬件加速可能会影响一些自定义View及绘制过程.因此,A

Android 游戏开发(一)了解View

Android游戏当中主要的除了控制类外就是显示类View.SurfaceView是从View基类中派生出来的显示类.android游戏开发中常用的三种视图是:view.SurfaceView和GLSurfaceView. View:显示视图,内置画布,提供图形绘制函数.触屏事件.按键事件函数等:必须在UI主线程内更新画面,速度较慢. SurfaceView:基于view视图进行拓展的视图类,更适合2D游戏的开发:是view的子类,类似使用双缓机制,在新的线程中更新画面所以刷新界面速度比view

Android中android.graphics下面的绘制图形类Canvas,Paint,Bitmap,Drawable

1.概念区别: 很多网友刚刚开始学习Android平台,对于Drawable.Bitmap.Canvas和Paint它们之间的概念不是很清楚, 其实它们除了Drawable外早在Sun的J2ME中就已经出现了,但是在Android平台中,Bitmap.Canvas相关的都有所变化. 首先让我们理解下Android平台中的显示类是View,但是还提供了底层图形类android.graphics,今天所说的这些均为graphics底层图形接口. Bitmap - 称作位图,一般位图的文件格式后缀为b

Android 游戏开发(二)SurfaceView初探

SurfaceView游戏框架在游戏开发当中有举足轻重的地位.SurfaceHolder类是用来控制SurfaceView的大小.格式,并且主要用于监听Surface的状态.SurfaceView好像就是一块内存数据里面记录着数据,更改数据而是由SurfaceHolder来控制,使用SurfaceHolder的lockCanvas()函数来获取SurfaceView的Canvas对象.然后在Canvas上绘制内容来修改SurfaceView中的数据. import android.content

[Android游戏开发学习笔记]View和SurfaceView

本文为阅读http://blog.csdn.net/xiaominghimi/article/details/6089594的笔记. 在Android游戏中充当主要角色的,除了控制类就是显示类.而在Android中涉及到显示的是View类,及继承自它的SurfaceView类和SurfaceView的其他子类等. 这里先只说View和SurfaceView.SurfaceView的直接子类有GLSurfaceView和VideoView,可以看出GL和视频播放以及CAmera摄像头一般均使用Su

[Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)

初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引擎可供使用,一边自暴自弃的抱怨Android平台游戏开发难度太高,又连个像样的游 戏引擎也没有,甚至误以为使用Java语言开发游戏是一件费力不讨好且没有出路的事情. 事实上,这种想法完全是没有必要且不符合实际的,作为能和苹果iOS分庭抗礼的Android(各种意义上),当然也会有相当数量的游戏引擎存

[Android游戏开发]游戏框架的搭建

通常情况下,游戏开发的基本框架中,一般包括以下模块: 窗口管理(Window management):该模块负责在Android平台上创建.运行.暂停.恢复游戏界面等功能. 输入模块(Input):该模块和视窗管理模块是密切相关的,用来监测追踪用户的输入(比如触摸事件.按键事件.加速计事件等). 文件输入输出(File I/O):此模块用来读取assets文件下图片.音频等资源. 图像模块(Graphics):在实际游戏开发中,这个模块或许是最复杂的部分.它负责加载图片并把它们绘制到屏幕上. 音

Android游戏开发之主角的移动与地图的平滑滚动

人物移动地图的平滑滚动处理 玩过rpg游戏的朋友应该都知道RPG的游戏地图一般都比较大 今天我和大家分享一下在RPG游戏中如何来处理超出手机屏幕大小的游戏地图. 如图所示为程序效果动画图 地图滚动的原理 在本人之前博客的文章中介绍过人物在屏幕中的移动方式,因为之前拼的游戏地图是完全填充整个手机屏幕的,所以无需处理地图的平滑滚动.这篇文章我着重的向 大家介绍一下控制人物移动后地图滚动的处理方式.举个例子 如上图所示 比如人物向右移动,如果地图贴在屏幕左边边界 将先移动人物在地图的坐标,当人物在屏幕