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

第103页



Matrix  matrix=new  Matrix();  //创建一个Matrix的对象



matrix.setRotate(30,10,10);  //将Matrix的对象旋转30°

创建Matrix的对象并对其进行旋转后,还需要应用该Matrix对图像或组件进行控制。在Canvas类中提供了一个drawBitmap(Bitmap  bitmap,  Matrix  matrix,  Paint  paint)方法,可以在绘制图像的同时应用Matrix上的变化。例如,需要将一个图像旋转30°后绘制到画布上,可以使用下面的代码:

Paint  paint=new  Paint();



Bitmap  bitmap=BitmapFactory.decodeResource(MainActivity.this.getResources(),  R.drawable.rabbit);



Matrix  matrix=new  Matrix();



matrix.setRotate(30);



canvas.drawBitmap(bitmap,  matrix,  paint);

例9.9   在Eclipse中创建Android项目,名称为9.9,实现应用Matrix旋转图像。(实例位置:光盘\TM\sl\9\9.9)

(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,用于显示自定义的绘图类。

(2)打开默认创建的MainActivity,在该文件中,首先创建一个名称为MyView的内部类,该类继承自android.view.View类,并添加构造方法和重写onDraw(Canvas  canvas)方法,然后在onCreate()方法中获取布局文件中添加的帧布局管理器,并将MyView视图添加到该帧布局管理器中。

(3)在MyView的onDraw()方法中,首先定义一个画笔,并绘制一张背景图像,然后在(0,0)点的位置绘制要旋转图像的原图,再绘制以(0,0)点为轴心旋转30°的图像,最后绘制以(87,87)点为轴心旋转90°的图像,具体代码如下:

Paint  paint=new  Paint();  //定义一个画笔



Bitmap  bitmap_bg=BitmapFactory.decodeResource(MainActivity.this.getResources(),  R.drawable.background);



canvas.drawBitmap(bitmap_bg,  0,  0,  paint);  //绘制背景图像



Bitmap  bitmap_rabbit=BitmapFactory.decodeResource(MainActivity.this.getResources(),  R.drawable.rabbit);



canvas.drawBitmap(bitmap_rabbit,  0,  0,  paint);  //绘制原图



//应用setRotate(float  degrees)方法旋转图像



Matrix  matrix=new  Matrix();



matrix.setRotate(30);  //以(0,0)点为轴心旋转30°



canvas.drawBitmap(bitmap_rabbit,  matrix,  paint);  //绘制图像并应用matrix的变换



//应用setRotate(float  degrees,  float  px,  float  py)方法旋转图像



Matrix  m=new  Matrix();



m.setRotate(90,87,87);  //以(87,87)点为轴心旋转90°



canvas.drawBitmap(bitmap_rabbit,  m,  paint);  //绘制图像并应用matrix的变换

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



图9.13 旋转图像

9.3.2 缩放图像

使用Android提供的android.graphics.Matrix类的setScale()、postScale()和preScale()方法,可对图像进行缩放。由于这3个方法除了方法名不同外,语法格式等均相同,下面将以setScale()方法为例来进行介绍。setScale()方法有以下两种语法格式。

[√]setScale(float  sx,  float  sy)

使用该语法格式可以控制Matrix进行缩放,参数sx和sy用于指定X轴和Y轴的缩放比例。例如,创建一个Matrix的对象,并将其在X轴上缩放30%,在Y轴上缩放20%,可以使用下面的代码:

Matrix  matrix=new  Matrix();  //创建一个Matrix的对象



matrix.setScale(0.3f,  0.2f);  //缩放Matrix对象

[√]setScale(float  sx,  float  sy,  float  px,  float  py)

使用该语法格式可以控制Matrix以参数px和py为轴心进行缩放,参数sx和sy用于指定X轴和Y轴的缩放比例。例如,创建一个Matrix的对象,并将其以(100,100)为轴心,在X轴和Y轴上均缩放30%,可以使用下面的代码:

Matrix  matrix=new  Matrix();  //创建一个Matrix的对象



matrix.  setScale  (30,30,100,100);  //缩放Matrix对象

创建Matrix的对象并对其进行缩放后,还需要应用该Matrix对图像或组件进行控制。同旋转图像一样,也可应用Canvas类中提供的drawBitmap(Bitmap  bitmap,  Matrix  matrix,  Paint  paint)方法,在绘制图像的同时应用Matrix上的变化。下面通过一个具体的实例来说明如何对图像进行缩放。

例9.10   在Eclipse中创建Android项目,名称为9.10,实现应用Matrix缩放图像。(实例位置:光盘\TM\sl\9\9.10)

(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,用于显示自定义的绘图类。

(2)打开默认创建的MainActivity,在该文件中,首先创建一个名称为MyView的内部类,该类继承自android.view.View类,并添加构造方法和重写onDraw(Canvas  canvas)方法,然后在onCreate()方法中获取布局文件中添加的帧布局管理器,并将MyView视图添加到该帧布局管理器中。

(3)在MyView的onDraw()方法中,首先定义一个画笔,并绘制一张背景图像,然后绘制以(0,0)点为轴心,在X轴和Y轴上均缩放200%的图像,再绘制以(156,156)点为轴心、在X轴和Y轴上均缩放80%的图像,最后在(0,0)点的位置绘制要缩放图像的原图,具体代码如下: