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); //设置渲染对象