Matrix是Android提供的一个矩形工具类,主要是结合其他的API(如Canvas有个使用到Matrix做参数的drawBitmap()方法)来控制图形或者View组件的平移、旋转、缩放和倾斜变换。这里只对其做一个简要介绍,之所以有此一文,也只为记录在开发过程中曾使用到Matrix解决了一个我曾比较头疼的问题,就是让不同尺寸的图形,如何在不同尺寸的屏幕上全屏且完整的显示,具体的解决方式就是就是通过Matrix可以控制图形缩放的setScale(float sx,float sy)方法来实现的。这个问题或许还有其他的解决方式,如能告知,在此先谢过。
先简单的介绍下Matrix提供的用于控制平移、旋转和缩放的方法:
setTranslate(float dx, float dy):用于控制图形的平移
setSkew(float kx, float ky, float px, float py):控制Matrix以px、py为轴心进行倾斜,其中,kx、ky为X、Y方向上的倾斜距离。
setSkew(float kx, float ky):控制Matrix进行倾斜。其中kx、ky为X、Y方向上的倾斜距离。
setRoatate(float degrees):控制Matrix进行旋转,degrees为旋转的角度。
setRotate(float degrees, flaot px, float py):设置以px、py为轴心进行旋转,degrees为旋转的角度。
setScale(float sx, float sy):设置Matrix进行缩放,sx、sy控制XY方向上的缩放比例。
setScale(flaot sx, float sy, float px, float py):设置以px、py为轴心进行缩放,sx/sy控制XY方向的缩放比例。
使用Matrix进行图形变换的步骤也很简单:首先是先得到Matrix对象,然后就是调用Matrix的方法进行设置变换方式,最后便是将这个Matrix对象与Android其他的API共同完成图形变换(比如通过调用Canvas的drawBitmap(Bitmap bitmap, Matrix matrix, Paint paint)方法将变换后的图形绘制在界面上),这样便是通过Matrix结合其他API完成图形变换的方式了。
这里再简单的介绍下我当时解决的问题的思路,其实很简单,要想将图片完整且全屏的显示在屏幕上,肯定调用的方法就是setScale(float sx, float sy)方法了,关键就是设置setScale()方法中的两个参数,这两个参数主要用于控制缩放比例,都为1.0是表示没有缩放,当为其他数时,便会缩小或者放大相应数值,正是基于这样,可以通过将屏幕的宽高分别比上图片的宽高,然后将这两个比值作为setScale()的两个参数,便可以完整且全屏的显示一张图片了。
也正是基于这种原理,程序界面就可以实现屏幕自适应,当然根据需要,也可以不将程序设为全屏显示,而将程序界面显示为全屏的某指定比例。
当然这种方式实现的图片的全屏显示,图片是有失真的。无失真的屏幕自适应,可以考虑使用draw9patch工具来自己制作。