Matrix
来源:互联网 发布:云南广电网络总经理 编辑:程序博客网 时间:2024/04/30 03:15
经常在中心缩放的应用中看到这段代码.
preTranslate是指在setScale前,平移,postTranslate是指在setScale后平移
注意他们参数是平移的距离,而不是平移目的地的坐标!
由于缩放是以(0,0)为中心的,所以为了把界面的中心与(0,0)对齐,就要preTranslate(-centerX,-centerY),
setScale完成后,调用postTranslate(centerX,centerY),再把图片移回来,这样看到的动画效果就是activity的界面图片从中心不停的缩放了
注:centerX和centerY是界面中心的坐标
____________________________________________________________
java.lang.Object ↳
android.graphics.Matrix
Public Constructors Matrix()
旋转
voidsetRotate(float degrees)
围绕点px, py 旋转 degrees度, 如果没设置坐标,默认以0,0点旋转.
例子: setRotate(45, 180, 120);
缩放,翻转
voidsetScale(float sx, float sy)
以点px,py为原点缩放 >=0 1为正常大小
如果是负数,图形就会翻转
如果没设置原点坐标,默认以0,0点缩放(如果发现图片不见了,检查一下是不是翻转出了屏幕)
例子:setScale(-0.5f, 1,180, 120); //左右翻转并缩放到一半大小
倾斜
voidsetSkew(float kx, float ky, float px, float py)
以点px,py为原点倾斜如果没有设置原点,则以0,0点为原点.
例子:setSkew(0, 1, 180, 120); //Y 方向拉伸
坐标
voidsetTranslate(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);
这就要考虑到矩阵的前乘和后乘了,不然的话你会发现可能坐标位置不是你想要的,可能图像都不见了.
如果在复杂一些,需要选择,缩放,倾斜同时起作用,并且还要设置坐标到屏幕指定位置你会发现很麻烦,需要自己计算出各个方法的参数,然后考虑调用的先后顺序.
但这里有一种更简便的方法,叫系统帮我们计算
booleansetConcat(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 方向拉伸
- 《Matrix》
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- mAtrix
- Matrix
- matrix
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- Matrix
- IOS 断点续传
- java对Excel操作大全
- smsManager.sendTextMessage() 发送短信息
- android 实现分享功能
- J2SE_一个.java文件中至多有一个public修饰的类
- Matrix
- 安装wamp时出现httpd.exe无法找到组件MSVCR100.dll的解决办法
- LeetCode — Single Number II 解题报告
- 指针问题
- 学习SEO最基础的知识
- Centos命令行执行Java程序(引入外部Jar)
- ASIHTTPRequest实现断点续传
- SunPinyin代码导读 - 语言模型的训练
- 蒙特卡罗方法(Monte Carlo method)