Andriod绘制图形
一、Canvas类aphics.Canvas
Canvas类好比手机中的画纸,我们可以在Canvas上画图形或者图像。一般我们用android来绘画的时候,需要四个组成部分:
1、位图:包含像素
2、Canvas画板:包含绘画内容,写入位图
3、初始图形:如Rect、Bitmap、text等
4、Paint:用来描述上面初始图形的颜和类型等
Canvas类提供了三个构造方法:
Public Canvas();构造一个默认无参的Canvas对象
Public Canvas(Bitmap bitmap);根据一个Bitmap构造一个Canvas对象
Public Canvas(GL gl);根据一个GL来构造一个对象
下面我们来了解一下Canvas类提供的方法:
在Canvas类提供的方法中比较多经常用的是以draw开头的方法,draw开头的方法很容易理解就是向画板中画图形,比如可以向Canvas中画位图,给图形填充颜等。
比如方法:
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)画弧形
drawCircle(float cx, float cy, float radius, Paint paint)画圆形
Canvas类提供的方法比较多,在此我们不一一赘述,在后面的内容中,我将给大家举几个实际的应用程序例子来演示Canvas类的使用方法。
二、Paint类aphics.Paint
Paint类包含有用来画几何图形、文本、位图的类型和颜等信息,如果把Canvas类看作是画板,那我
们可以把Paint类看做是画笔,可以根据需要画出不同颜和样式的图形、文本等内容。
Paint类有三个构造方法:
Public Paint()构造一个缺省的Paint对象
Public  Paint(int flags);根据指定的flags来构造一个Paint对象,创建之后可以用setFlags()方法来更改
Public Paint(Paint paint)根据指定的paint对象来构造一个Paint对象
Paint类提供了很多方法来设置和获取Paint对象的属性,比如:
public int getColor ()获得Paint对象的颜值
public ColorFilter getColorFilter ()获得颜过滤器
public float getTextSize ()获得字体大小数值
public void setStyle (Paint.Style style)设置paint的类型
三Color类aphics.Color
此类定义了一些方法来创建和转换颜值。颜被表示为封装的数值,这个数值由四个字节组成,分别是:alpha、red、green、blue,这些值是非自左乘的,也就是说任何透明性只存储在alpha部分,而不是在颜组成部分。每一部分按照如下的顺序保存:
(alpha<<24)|(red<<16)|<green<<8)|blue.每一部分的取值范围在0-255之间,0意味着这部分不起作用,255表示100%的起作用。因此不透明的黑应该是0xFF000000,不透明的白应该是0xFFFFFFFF 。
Color类提供了12个常量值来代表不同的颜值,我们在开发工程中可以直接调用这些常量值来设置我们所要修饰的文本、图形等对象。
Color类提供了一个无参的构造方法Color()
Color类提供了一些方法来进行颜值的创建和转换如下:
其中三个方法是用来返回一个颜常量值的红绿蓝分,数值分别在0-255之间,如下:Public static red(int color);
Public static green(int color);
Public static blue(int color);
其中Public static int rgb(int red,int green,int blue);输入红绿蓝三,返回一个RGB颜值。下面几个方法大家可以参考Android API来了解:
Public static int HSVToColor(int alpha,float[] hsv);
Public static int HSVToColor(float[] hsv);
Public static void RGBToHSV(int red,int green,int blue,float[] hsv);
Public static int alpha(int color);
Public static int argb(int alpha,int red,int green,int blue);
Public static colorToHSV(int color,float[] hsv);
Public static parseColor(String colorString);
四.Typeface类aphics.Typeface
Typeface类定义字体和字体内在的类型。这个类被用在画笔Paint设置的时候,比如用textSize,textSkewX和textScale设置来指定text在画的时候如何来显示和测量。Typeface提供了一些常量
值来表示自身的一些属性,比如BOLD,BOLD_ITALIC,ITALIC 等,开发者可以用defaultFrOPhone SDNtyle(int style)获得内在的Typeface对象。读者可以参考详细的API文档再这里就不再赘述了。
下面我们来看一下Typeface的主要方法。
Typeface类没有构造方法,通常如果一个类没有构造函数就无法通过构造来生成一个对象实体,此时一般会有特定的静态方法来取得这个类的实体。Typeface就提供了四个静态方法间接来得到Typeface实体分别如下:
Public static Typeface create(Typeface family,int style);
此方法返回一个与已经存在的Typeface字形体系相匹配且类型是指定类型的Typeface。如果你想得到一个与已经存在的Typeface字形体系相类似,但是样式不一样的Typeface时可以调用此方法。其中family参数可以为null,如果为空则表示从默认的Typeface字形体系中选择。
Public static Typefaxe create(String familyname,int style);
此方法通过给定的字形体系的名称familyname和指定的类型返回一个Typeface对象。如果给定字形体系的名称为null,我们可以通过getStyle()方法来获得返回Typeface对象的真正的属性。
Public static Typeface createFromAsset(AssetManager mgr,String path);
此方法通过规定的字体数据来返回一个Typeface对象。第一个参数为资源管理器,第二个参数是指定字体类型。
Public static Typeface defaultFrOPhone SDNtyle(int style);此方法返回一个指定类型的Typeface对象
Typeface还提供了另外三个方法:
Public int getStyle();此方法返回Typeface内在的类型属性
Public final Boolean isBold();如果getStyle()有BOLD位组将返回true
Public final Boolean isItalic();如果getStyle()有ITALIC位组将返回truefloat型
五、Path类aphics.Path
Path类(一组区域)的描画,类囊括多种几何图形比如直线线段、二次曲线、三次曲线等,调用Canvas.drawPath()方法可以将Path以所定义的paint的方式来画到画板上或者填出图形,也可以用paint所指定方式来画图形。
六、RectF类aphics.RectF和Rect类
RectF这个类包含一个矩形的四个单精度浮点坐标。矩形通过上下左右4个边的坐标来表示一个矩形。这些坐标值属性可以被直接访问,用width()和height()方法可以获取矩形的宽和高。注意:大多数方法不会检查这些坐标分类是否错误(也就是left<=right和top<=bottom).
RectF一共有四个构造方法:
RectF()构造一个无参的矩形
RectF(float left,float top,float right,float bottom)构造一个指定了4个参数的矩形RectF(Rect F r)根据指定的RectF对象来构造一个RectF对象(对象的左边坐标不变) RectF(Rect r)根据给定的Rect对象来构造一个RectF对象
RectF提供了很多方法,下面介绍几个方法:
Public Boolean contain(RectF r);判断一个矩形是否在此矩形内,如果在这个矩形内或者和这个矩形等价则返回true,同样类似的方法还有public Boolean contain(float left,float top,float right,float bottom)和public Boolean contain(float x,float y)。
Public void union(float x,float y)更新这个矩形,使它包含矩形自己和(x,y)这个点。RectF类提供的方法都比较简单,容易理解,再此就不再一一赘述
七、Point类aphics.Point
这个类从字面意思就可以看出它跟点有关系,是点的一个对象类。
这个类有两个属性,分别是:X坐标和y坐标。
构造函数有三个:Point(),Point(int x,int y),Point(Point p)
主要方法有:
Public void set(x,y);重新设定一下x,y的坐标
Public final void offset(int dx,int dy);给坐标一个补偿值,值可以使正的也可以是负的。Public final void negate();否定坐标值。
Point类和aphics.PointF类似,不同点是前者坐标值的类型是int型,而后者的坐标值是float型。除此之外PointF类多加了几个方法,比如:
Public final float length();返回(0,0)点到该点的距离。
Public static float length(float x,float y);返回(0,0)点到(x,y)点的距离。
八、绘制几何图形:使用aphics类
本范例将运用Paint对象(绘笔)的设置值不同,在Cavas(画布)上绘制空心、实习及渐变的多种几何多形
“如何在和机上绘制2D图形呢?”这是许多android游戏开发都是常提到的问题,在android SDK 当中,并没有JavaGraphics2D的函数可以使用,而是使用aphics 底下的类来绘制2D向量图。这个package提供了许多在手机上绘制图形的类与方法,其中Canvas上,而Paint(aphics.Paint)类则像是彩铅笔,给予不同的调协,即可绘制不同颜、不同种类效果的向量图形
范例程序
主程序中继承自Android.view.View的 MyView类,重写 MyView的onDraw()方法,一开始就会运行绘制的工作,在onDraw()中以Paint将几何图形绘制在Canvas上,以paint.setColor() 改变图形颜、以 paint.setStyle()的设置来控制画出的的图形是空心还是实心。程序的最后一段,就是直接在Canvas写上文字,随着Paint对象里的属性设置,也会有不同的外观模式。
aphices;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
t.Context;
aphics.Canvas;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。