表9.3 BitmapFactory类的常用方法
方 法 描 述
decodeFile(String pathName) 用于从给定的路径所指定的文件中解析、创建Bitmap对象
decodeFileDescriptor(FileDescriptor fd) 用于从FileDescriptor对应的文件中解析、创建Bitmap对象
decodeResource(Resources res, int id) 用于根据给定的资源id,从指定的资源中解析、创建Bitmap对象
decodeStream(InputStream is) 用于从指定的输入流中解析、创建Bitmap对象
例如,要解析SD卡上的图片文件img01.jpg并创建对应的Bitmap对象,可以使用下面的代码:
String path="/sdcard/pictures/bccd/img01.jpg";
Bitmap bm=BitmapFactory.decodeFile(path);
要解析Drawable资源中保存的图片文件img02.jpg并创建对应的Bitmap对象,可以使用下面的代码:
Bitmap bm=BitmapFactory.decodeResource(MainActivity.this.getResources(), R.drawable.img02);
9.2 绘制2D图像
教学录像:光盘\TM\lx\9\绘制2D图像.exe
Android提供了非常强大的本机二维图形库,用于绘制2D图像。在Android应用中,比较常用的是绘制几何图形、文本、路径和图片等,下面分别进行介绍。
9.2.1 绘制几何图形
常见的几何图形包括点、线、弧、圆形、矩形等。在Android中,Canvas类提供了丰富的绘制几何图形的方法,通过这些方法,可以绘制出各种几何图形。常用的绘制几何图形的方法如表9.4所示。
表9.4 Canvas类提供的绘制几何图形的方法
说明: 表9.4中给出的绘图效果使用的画笔均为以下代码所定义的画笔。
Paint paint=new Paint(); //创建一个采用默认设置的画笔
paint.setAntiAlias(true); //使用抗锯齿功能
paint.setColor(Color.RED); //设置颜色为红色
paint.setStrokeWidth(2); //笔触的宽度为2像素
paint.setStyle(Style.STROKE); //填充样式为描边
例9.3 在Eclipse中创建Android项目,名称为9.3,实现绘制由5个不同颜色的圆形组成的图案。(实例位置:光盘\TM\sl\9\9.3)
(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,用于显示自定义的绘图类。修改后的代码如下:
android:id="@+id/frameLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
(2)打开默认创建的MainActivity,在该文件中,创建一个名称为MyView的内部类,该类继承自android.view.View类,并添加构造方法和重写onDraw(Canvas canvas)方法,关键代码如下:
public class MyView extends View{
public MyView(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
}
(3)在MainActivity的onCreate()方法中,获取布局文件中添加的帧布局管理器,并将步骤(2)中创建的MyView视图添加到该帧布局管理器中,关键代码如下:
FrameLayout ll=(FrameLayout)findViewById(R.id.frameLayout1); //获取布局文件中添加的帧布局管理器
ll.addView(new MyView(this)); //将自定义的MyView视图添加到帧布局管理器中
(4)在MyView的onDraw()方法中,首先指定画布的背景色,然后创建一个采用默认设置的画笔,并设置该画笔使用抗锯齿功能,接着设置画笔笔触的宽度,再设置填充样式为描边,最后设置画笔颜色并绘制圆形。具体代码如下:
canvas.drawColor(Color.WHITE); //指定画布的背景色为白色
Paint paint=new Paint(); //创建采用默认设置的画笔
paint.setAntiAlias(true); //使用抗锯齿功能
paint.setStrokeWidth(3); //设置笔触的宽度
paint.setStyle(Style.STROKE); //设置填充样式为描边
paint.setColor(Color.BLUE);
canvas.drawCircle(50, 50, 30, paint); //绘制蓝色的圆形
paint.setColor(Color.YELLOW);
canvas.drawCircle(100, 50, 30, paint); //绘制黄色的圆形
paint.setColor(Color.BLACK);
canvas.drawCircle(150, 50, 30, paint); //绘制黑色的圆形
paint.setColor(Color.GREEN);
canvas.drawCircle(75, 90, 30, paint); //绘制绿色的圆形
paint.setColor(Color.RED);
canvas.drawCircle(125, 90, 30, paint); //绘制红色的圆形
运行本实例,将显示如图9.4所示的运行结果。
图9.4 绘制5个不同颜色的圆形
9.2.2 绘制文本
在Android中,虽然可以通过TextView或图片显示文本,但是在开发游戏,特别是开发RPG(角色)类游戏时,会包含很多文字,使用TextView和图片显示文本不太合适,这时,就需要通过绘制文本的方式来实现。Canvas类提供了一系列绘制文本的方法,下面分别进行介绍。