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

第105页



setTranslate  (float  dx,  float  dy)

在该语法中,参数dx和dy用于指定将Matrix移动到的位置的x和y坐标。

例如,创建一个Matrix的对象,并将其平移到(100,50)的位置,可以使用下面的代码:

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



matrix.setTranslate(100,50);  //将对象平移到(100,50)的位置

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

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

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

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

(3)在MyView的onDraw()方法中,首先定义一个画笔,并绘制一张背景图像,然后在(0,0)点的位置绘制要缩放图像的原图,再创建一个Matrix的对象,并将其旋转30°后平移到指定位置,最后绘制应用matrix变换的图像,具体代码如下:

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);



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



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



matrix.setRotate(30);  //将matrix旋转30°



matrix.postTranslate(100,50);  //将matrix平移到(100,50)的位置



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

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



图9.16 旋转并平移图像

9.3.5 使用BitmapShader渲染图像

在Android中,提供的BitmapShader类主要用来渲染图像。如果需要将一张图片裁剪成椭圆形或圆形等形状并显示到屏幕上,就可以使用BitmapShader类来实现。使用BitmapShader来渲染图像的基本步骤如下。

(1)创建BitmapShader类的对象,可以通过以下构造方法进行创建:

BitmapShader(Bitmap  bitmap,  Shader.TileMode  tileX,  Shader.TileMode  tileY)

其中,参数bitmap用于指定一个位图对象,通常是要用来渲染的原图像;参数tileX用于指定在水平方向上图像的重复方式;参数tileY用于指定在垂直方向上图像的重复方式。

例如,要创建一个在水平方向上重复、在垂直方向上镜像的BitmapShader对象,可以使用下面的代码:

BitmapShader  bitmapshader=  new  BitmapShader(bitmap_bg,TileMode.REPEAT,TileMode.MIRROR);

说明:  Shader.TileMode类型的参数包括CLAMP、MIRROR和REPEAT  3个可选值,其中,CLAMP为使用边界颜色来填充剩余的空间;MIRROR为采用镜像方式;REPEAT为采用重复方式。

(2)通过Paint的setShader()方法来设置渲染对象。

(3)在绘制图像时,使用已经设置了setShader()方法的画笔。

下面通过一个具体的实例来说明如何使用BitmapShader渲染图像。

例9.13   在Eclipse中创建Android项目,名称为9.13,应用BitmapShader实现平铺的画布背景和椭圆形的图片。(实例位置:光盘\TM\sl\9\9.13)

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

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

(3)在MyView的onDraw()方法中,首先定义一个画笔,并设置其使用抗锯齿功能,然后应用BitmapShader实现平铺的画布背景,这里使用的是一张机器人图片,接下来绘制一张椭圆形的图片,具体代码如下:

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



paint.setAntiAlias(true);  //使用抗锯齿功能



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



//创建一个在水平和垂直方向都重复的BitmapShader对象



BitmapShader  bitmapshader=  new  BitmapShader(bitmap_bg,TileMode.REPEAT,TileMode.REPEAT);



paint.setShader(bitmapshader);  //设置渲染对象