乐读文学

Android从入门到精通

乐读文学 > 科普学习 > Android从入门到精通

第99页

书籍名:《Android从入门到精通》    作者:明日科技


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);