万书网 > 文学作品 > Android从入门到精通 > 第95页

第95页





paint.setShader(shader);  //为画笔设置渐变器



canvas.drawRect(220,  70,  310,  150,  paint);  //绘制矩形

运行本实例,将显示如图9.2所示的运行结果。



图9.2 绘制以渐变色填充的矩形

9.1.2 Canvas类

Canvas类代表画布,通过该类提供的方法,可以绘制各种图形(如矩形、圆形和线条等)。通常情况下,要在Android中绘图,需要先创建一个继承自View类的视图,并且在该类中重写其onDraw(Canvas  canvas)方法,然后在显示绘图的Activity中添加该视图。下面将通过一个具体的实例来说明如何创建用于绘图的画布。

例9.2   在Eclipse中创建Android项目,名称为9.2,实现创建绘图画布的功能。(实例位置:光盘\TM\sl\9\9.2)

(1)创建一个名称为DrawView的类(该类继承自android.view.View类),并添加构造方法和重写onDraw(Canvas  canvas)方法,关键代码如下:

public  class  DrawView  extends  View  {



/**



*  功能:构造方法



*/



public  DrawView(Context  context,  AttributeSet  attrs)  {



super(context,  attrs);



}



/*



*  功能:重写onDraw()方法



*/



@Override



protected  void  onDraw(Canvas  canvas)  {



super.onDraw(canvas);



}



}

说明:  上面加粗的代码为重写onDraw()方法的代码。在重写的onDraw()方法中,可以编写绘图代码,参数canvas就是要进行绘图的画布。

(2)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,并在帧布局管理器中添加步骤(1)中创建的自定义视图。修改后的代码如下:








android:layout_width="fill_parent"



android:layout_height="fill_parent"



android:orientation="vertical"  >






android:id="@+id/drawView1"



android:layout_width="wrap_content"



android:layout_height="wrap_content"  />





(3)在DrawView的onDraw()方法中,添加以下代码,用于绘制一个带阴影的红色矩形。

Paint  paint=new  Paint();  //定义一个采用默认设置的画笔



paint.setColor(Color.RED);  //设置颜色为红色



paint.setShadowLayer(2,  3,  3,  Color.rgb(180,  180,  180));  //设置阴影



canvas.drawRect(40,  40,  200,  100,  paint);  //绘制矩形

运行本实例,将显示如图9.3所示的运行结果。



图9.3 创建绘图画布并绘制带阴影的矩形

9.1.3 Bitmap类

Bitmap类代表位图,是Android系统中图像处理的一个重要类。使用该类,不仅可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,而且还可以指定格式保存图像文件。对于这些操作,都可以通过Bitmap类提供的方法来实现。Bitmap类提供的常用方法如表9.2所示。

表9.2 Bitmap类的常用方法





方 法  描 述

compress(Bitmap.CompressFormat  format,  int  quality,  OutputStream  stream)  用于将Bitmap对象压缩为指定格式并保存到指定的文件输出流中,其中format参数值可以是Bitmap.CompressFormat.PNG、Bitmap.CompressFormat.  JPEG和Bitmap.CompressFormat.WEBP

createBitmap(Bitmap  source,  int  x,  int  y,  int  width,  int  height,  Matrix  m,  boolean  filter)  用于从源位图的指定坐标点开始,“挖取”指定宽度和高度的一块图像来创建新的Bitmap对象,并按Matrix指定规则进行变换

createBitmap(int  width,  int  height,  Bitmap.Config  config)  用于创建一个指定宽度和高度的新的Bitmap对象

createBitmap(Bitmap  source,  int  x,  int  y,  int  width,  int  height)  用于从源位图的指定坐标点开始,“挖取”指定宽度和高度的一块图像来创建新的Bitmap对象

createBitmap(int[]  colors,  int  width,  int  height,  Bitmap.Config  config)  使用颜色数组创建一个指定宽度和高度的新的Bitimap对象,其中,数组元素的个数为width*height

createBitmap(Bitmap  src)  用于使用源位图创建一个新的Bitmap对象

createScaledBitmap(Bitmap  src,  int  dstWidth,  int  dstHeight,  boolean  filter)  用于将源位图缩放为指定宽度和高度的新的Bitmap对象

isRecycled()  用于判断Bitmap对象是否被回收

recycle()  强制回收Bitmap对象

说明:  表9.2中给出的方法不包括对图像进行缩放和旋转的方法,关于如何使用Bitmap类对图像进行缩放和旋转,将在9.3节进行介绍。

例如,创建一个包括4个像素(每个像素对应一种颜色)的Bitmap对象的代码如下:

Bitmap  bitmap=Bitmap.createBitmap(new  int[]{Color.RED,Color.GREEN,Color.BLUE,Color.MAGENTA},  4,  1,  Config.RGB_565);

9.1.4 BitmapFactory类

在Android中,还提供了一个BitmapFactory类,该类为一个工具类,用于从不同的数据源来解析、创建Bitmap对象。BitmapFactory类提供的创建Bitmap对象的常用方法如表9.3所示。