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

第104页



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()方法的语法格式如下: