Paint paint=new Paint(); //定义一个画笔
paint.setAntiAlias(true);
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);
//应用setScale(float sx, float sy)方法缩放图像
Matrix matrix=new Matrix();
matrix.setScale(2f, 2f); //以(0,0)点为轴心将图像在X轴和Y轴上均缩放200%
canvas.drawBitmap(bitmap_rabbit, matrix, paint); //绘制图像并应用matrix的变换
//应用setScale(float sx, float sy, float px, float py) 方法缩放图像
Matrix m=new Matrix();
m.setScale(0.8f,0.8f,156,156); //以(156,156)点为轴心将图像在X轴和Y轴上均缩放80%
canvas.drawBitmap(bitmap_rabbit, m, paint); //绘制图像并应用matrix的变换
canvas.drawBitmap(bitmap_rabbit, 0, 0, paint); //绘制原图
运行本实例,将显示如图9.14所示的运行结果。
图9.14 缩放图像
9.3.3 倾斜图像
使用Android提供的android.graphics.Matrix类的setSkew()、postSkew()和preSkew()方法,可对图像进行倾斜。由于这3个方法除了方法名不同外,语法格式等均相同,下面将以setSkew()方法为例来进行介绍。setSkew()方法有以下两种语法格式。
[√]setSkew(float kx, float ky)
使用该语法格式可以控制Matrix进行倾斜,参数kx和ky用于指定在X轴和Y轴上的倾斜量。例如,创建一个Matrix的对象,并将其在X轴上倾斜0.3,在Y轴上不倾斜,可以使用下面的代码:
Matrix matrix=new Matrix(); //创建一个Matrix的对象
matrix.setSkew(0.3f, 0); //倾斜Matrix对象
[√]setSkew(float kx, float ky, float px, float py)
使用该语法格式可以控制Matrix以参数px和py为轴心进行倾斜,参数sx和sy用于指定在X轴和Y轴上的倾斜量。例如,创建一个Matrix的对象,并将其以(100,100)为轴心,在X轴和Y轴上均倾斜0.1,可以使用下面的代码:
Matrix matrix=new Matrix(); //创建一个Matrix的对象
matrix. setSkew (0.1f,0.1f,100,100); //倾斜Matrix对象
创建Matrix的对象并对其进行倾斜后,还需要应用该Matrix对图像或组件进行控制。同旋转图像一样,也可应用Canvas类中提供的drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)方法,在绘制图像的同时应用Matrix上的变化。下面通过一个具体的实例来说明如何对图像进行倾斜。
例9.11 在Eclipse中创建Android项目,名称为9.11,实现应用Matrix倾斜图像。(实例位置:光盘\TM\sl\9\9.11)
(1)修改新建项目的res\layout目录下的布局文件main.xml,将默认添加的线性布局管理器和TextView组件删除,然后添加一个帧布局管理器,用于显示自定义的绘图类。
(2)打开默认创建的MainActivity,在该文件中,首先创建一个名称为MyView的内部类,该类继承自android.view.View类,并添加构造方法和重写onDraw(Canvas canvas)方法,然后在onCreate()方法中获取布局文件中添加的帧布局管理器,并将MyView视图添加到该帧布局管理器中。
(3)在MyView的onDraw()方法中,首先定义一个画笔并绘制一张背景图像,然后绘制以(0,0)点为轴心,在X轴上倾斜2、在Y轴上倾斜1的图像,再绘制以(78,69)点为轴心,在X轴上倾斜-0.5的图像,最后在(0,0)点的位置绘制要缩放图像的原图,具体代码如下:
Paint paint=new Paint(); //定义一个画笔
paint.setAntiAlias(true);
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);
//应用setSkew(float sx, float sy)方法倾斜图像
Matrix matrix=new Matrix();
matrix.setSkew(2f, 1f); //以(0,0)点为轴心将图像在X轴上倾斜2,在Y轴上倾斜1
canvas.drawBitmap(bitmap_rabbit, matrix, paint); //绘制图像并应用matrix的变换
//应用setSkew(float sx, float sy, float px, float py) 方法倾斜图像
Matrix m=new Matrix();
m.setSkew(-0.5f, 0f,78,69); //以(78,69)点为轴心将图像在X轴上倾斜-0.5
canvas.drawBitmap(bitmap_rabbit, m, paint); //绘制图像并应用matrix的变换
canvas.drawBitmap(bitmap_rabbit, 0, 0, paint); //绘制原图
运行本实例,将显示如图9.15所示的运行结果。
图9.15 倾斜图像
9.3.4 平移图像
使用Android提供的android.graphics.Matrix类的setTranslate()、postTranslate()和preTranslate()方法,可对图像进行平移。由于这3个方法除了方法名不同外,语法格式等均相同,下面将以setTranslate()方法为例来进行介绍。setTranslate()方法的语法格式如下: