Public Constructors Matrix() Matrix(Matrix src)
旋转
void setRotate(float degrees) void setRotate(float degrees, float px, float py)
围绕点px, py 旋转 degrees度, 如果没设置坐标,默认以0,0点旋转.
例子: setRotate(45, 180, 120);
缩放,翻转
void setScale(float sx, float sy) void setScale(float sx, float sy, float px, float py)
以点px,py为原点缩放 >=0 1为正常大小
如果是负数,图形就会翻转
如果没设置原点坐标,默认以0,0点缩放(如果发现图片不见了,检查一下是不是翻转出了屏幕)
例子:setScale(-0.5f, 1,180, 120); //左右翻转并缩放到一半大小
倾斜
void setSkew(float kx, float ky, float px, float py) void setSkew(float kx, float ky)
以点px,py为原点倾斜如果没有设置原点,则以0,0点为原点.
例子:setSkew(0, 1, 180, 120); //Y 方向拉伸
坐标
void setTranslate(float dx, float dy)
是图片移动到某一个位置
注意
Matrix中带有pre, post的函数需要考虑先后顺序
例如:想要旋转45度,然后平移到100,100的位置需要
Matrix matrix = new Matrix();matrix.postRotate(45);matrix.postTranslate(100, 100);
或者
Matrix matrix = new Matrix();matrix.setTranslate(100, 100);matrix.preRotate(45);
这就要考虑到矩阵的前乘和后乘了,不然的话你会发现可能坐标位置不是你想要的,可能图像都不见了.
如果在复杂一些,需要选择,缩放,倾斜同时起作用,并且还要设置坐标到屏幕指定位置你会发现很麻烦,需要自己计算出各个方法的参数,然后考虑调用的先后顺序.
但这里有一种更简便的方法,叫系统帮我们计算
boolean setConcat(Matrix a, Matrix b)
这个方法的意思是帮我们把两个 Matrix对象计算并连接起来.
这样的话我们就可以这样使用了
Matrix mRotateMatrix = new Matrix(); //控制旋转Matrix mScaleMatrix = new Matrix(); //控制缩放Matrix mSkewMatrix = new Matrix(); //控制倾斜Matrix mPosMatrix = new Matrix(); //控制坐标Matrix mMatrix = new Matrix(); //合并mMatrix.setConcat(mRotateMatrix, mScaleMatrix);mMatrix.setConcat(mMatrix, mSkewMatrix);mMatrix.setConcat(mMatrix, mPosMatrix);canvas.drawBitmap(mBitmap, mMatrix, mPaint);
注意:合并的第一步不能直接用mMatrix自身去连接其他的Matrix,我试过几次结果图像又飞了,大家再试试
例子:
同时设置
setRotate(45, 180, 120);
setScale(-0.5f, 1,180, 120); //左右翻转并缩放到一半大小
setSkew(0, 1, 180, 120); //Y 方向拉伸
联系客服