第99页
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint) 用于从指定点绘制从源位图中“挖取”的一块
例如,从源位图上“挖取”从(0,0)点到(500,300)点的一块图像,然后绘制到画布的(50,50)点到(450,350)点所指区域,可以使用下面的代码:
Rect src=new Rect(0,0,500,300); //设置挖取的区域
Rect dst=new Rect(50,50,450,350); //设置绘制的区域
canvas.drawBitmap(bm, src, dst, paint); //绘制图片
例9.6 在Eclipse中创建Android项目,名称为9.6,实现在屏幕上绘制指定位图,以及从该位图上“挖取”一块绘到屏幕的指定区域。(实例位置:光盘\TM\sl\9\9.6)
(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,用于显示自定义的绘图类,并在该帧布局管理器中添加一个ImageView组件。关键代码如下:
android:id="@+id/frameLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
android:id="@+id/imageView1"
android:layout_width="100px"
android:paddingTop="5px"
android:layout_height="25px"/>
(2)打开默认创建的MainActivity,在该文件中,首先创建一个名称为MyView的内部类,该类继承自android.view.View类,并添加构造方法和重写onDraw(Canvas canvas)方法,然后在onCreate()方法中,获取布局文件中添加的帧布局管理器,并将MyView视图添加到该帧布局管理器中。
(3)在MainActivity中,声明一个ImageView组件的对象,关键代码如下:
private ImageView iv;
(4)在MainActivity的onCreate()文件中,获取布局文件中添加的ImageView组件,关键代码如下:
iv=(ImageView)findViewById(R.id.imageView1); //获取布局文件中添加的ImageView组件
(5)在MyView的onDraw()方法中,首先创建一个画笔,并指定要绘制图片的路径,获取获取要绘制图片所对应的Bitmap对象,再在画布的指定位置绘制Bitmap对象,以及从源图片中挖取指定区域并绘制挖取到的图像,最后使用颜色数组创建一个Bitmap对象,并将其在ImageView中显示。具体代码如下:
Paint paint = new Paint(); //创建一个采用默认设置的画笔
String path = "/sdcard/pictures/bccd/img01.png"; //指定图片文件的路径
Bitmap bm = BitmapFactory.decodeFile(path); //获取图片文件对应的Bitmap对象
canvas.drawBitmap(bm, 0, 30, paint); //将获取的Bitmap对象绘制在画布的指定位置
Rect src = new Rect(95, 150, 175, 240); //设置挖取的区域
Rect dst = new Rect(420, 30, 500, 120); //设置绘制的区域
canvas.drawBitmap(bm, src, dst, paint); //绘制挖取到的图像
Bitmap bitmap = Bitmap.createBitmap(new int[] { Color.RED, Color.GREEN, Color.BLUE,
Color.MAGENTA }, 4, 1,Config.RGB_565); //使用颜色数组创建一个Bitmap对象
iv.setImageBitmap(bitmap); //为ImageView指定要显示的位图
(6)重写onDestroy()方法,在该方法中回收ImageView组件中使用的Bitmap资源,具体代码如下:
@Override
protected void onDestroy() {
//获取ImageView组件中使用的BitmapDrawabele资源
BitmapDrawable b = (BitmapDrawable) iv.getDrawable();
if (b != null && !b.getBitmap().isRecycled()) {
b.getBitmap().recycle(); //回收资源
}
super.onDestroy();
}
运行本实例,将显示如图9.10所示的运行结果。
图9.10 绘制图片
9.2.5 范例1:绘制Android的机器人
例9.7 在Eclipse中创建Android项目,名称为9.7,实现在屏幕上绘制Android机器人。(实例位置:光盘\TM\sl\9\9.7)
(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,用于显示自定义的绘图类。
(2)打开默认创建的AndroidIco,在该文件中,首先创建一个名称为MyView的内部类,该类继承自android.view.View类,并添加构造方法和重写onDraw(Canvas canvas)方法,然后在onCreate()方法中获取布局文件中添加的帧布局管理器,并将MyView视图添加到该帧布局管理器中。
(3)在MyView的onDraw()方法中,首先创建一个画笔,并设置画笔的相关属性,然后绘制机器人的头、眼睛、天线、身体、胳膊和腿,具体代码如下:
Paint paint=new Paint(); //采用默认设置创建一个画笔
paint.setAntiAlias(true); //使用抗锯齿功能
paint.setColor(0xFFA4C739); //设置画笔的颜色为绿色
//绘制机器人的头
RectF rectf_head=new RectF(10, 10, 100, 100);
rectf_head.offset(100, 20);