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)点的位置绘制要缩放图像的原图,具体代码如下: