Android graphics学习笔记(5) - Matrix
2013-11-11 11:20
369 查看
public class Matrix extends Object
Matrix类主要用来进行图形的矩阵变换
在学习Matrix之前,先复习下几个公式:
1. 矩阵乘法:
[a11, a12, a13 * [b11, b12] ……
a21, a22, a23]
2. 两角和差公式
sin(α+β)=sin α×cosβ+sinβ×cos α
sin(α-β)=sin α×cosβ-sinβ×cos α
cos(x+y)=cosxcosy-sinxsiny
cos(x-y)=cosxcosy+sinxsiny
Matrix定义了一个3×3的矩阵用于进行图形变换.
参数有:
int MPERSP_0
int MPERSP_1
int MPERSP_2
int MSCALE_X
int MSCALE_Y
int MSKEW_X
int MSKEW_Y
int MTRANS_X
int MTRANS_Y
包括SCALE(缩放), SKEW(歪斜), TRANS(平移), PERSP(好像定义的是3D方面的转动角度)
同时Matrix定义了一系列的set,pre,post方法来设定变换的参数:
同时,这几种方法是有不同的意义的:
set方法执行后,之前设置的参数都会被清除.变为默认值.
pre方法会在set、post和前面的pre方法之前调用.
post则是最正常的,依次调用.
比如:
matrix = new Matrix();
matrix.setRotate(10.0f); //step ①
matrix.postScale(0.5f, 0.5f); //step ②
matrix.postTranslate(0, 100.0f); //step ③
matrix.preRotate(30.0f); //step ④
matrix.preTranslate(300.0f, 0); //step ⑤
canvas.drawBitmap(bitmap, matrix, mPaint);
调用顺序是⑤④①②③
这里值得一提的是,这种调用顺序变化的实现方式是通过矩阵的前乘和后乘实现的。
具体的方法有:
setRotate(),setScale(),setSinCos(),setSkew(),setTranslate(),
Matrix还提供了一个方法:setValues(float[] values).
这个方法该怎么传递变换参数呢:
这里,values就是包含上述9个参数的一个3维数组,也可以称为3阶矩阵.正是这个3阶矩阵和原矩阵相乘,从而得到新的变换矩阵.
更多参考见API:
http://developer.android.com/reference/android/graphics/Matrix.html
Matrix类主要用来进行图形的矩阵变换
在学习Matrix之前,先复习下几个公式:
1. 矩阵乘法:
[a11, a12, a13 * [b11, b12] ……
a21, a22, a23]
2. 两角和差公式
sin(α+β)=sin α×cosβ+sinβ×cos α
sin(α-β)=sin α×cosβ-sinβ×cos α
cos(x+y)=cosxcosy-sinxsiny
cos(x-y)=cosxcosy+sinxsiny
Matrix定义了一个3×3的矩阵用于进行图形变换.
参数有:
int MPERSP_0
int MPERSP_1
int MPERSP_2
int MSCALE_X
int MSCALE_Y
int MSKEW_X
int MSKEW_Y
int MTRANS_X
int MTRANS_Y
包括SCALE(缩放), SKEW(歪斜), TRANS(平移), PERSP(好像定义的是3D方面的转动角度)
同时Matrix定义了一系列的set,pre,post方法来设定变换的参数:
同时,这几种方法是有不同的意义的:
set方法执行后,之前设置的参数都会被清除.变为默认值.
pre方法会在set、post和前面的pre方法之前调用.
post则是最正常的,依次调用.
比如:
matrix = new Matrix();
matrix.setRotate(10.0f); //step ①
matrix.postScale(0.5f, 0.5f); //step ②
matrix.postTranslate(0, 100.0f); //step ③
matrix.preRotate(30.0f); //step ④
matrix.preTranslate(300.0f, 0); //step ⑤
canvas.drawBitmap(bitmap, matrix, mPaint);
调用顺序是⑤④①②③
这里值得一提的是,这种调用顺序变化的实现方式是通过矩阵的前乘和后乘实现的。
具体的方法有:
setRotate(),setScale(),setSinCos(),setSkew(),setTranslate(),
Matrix还提供了一个方法:setValues(float[] values).
这个方法该怎么传递变换参数呢:
这里,values就是包含上述9个参数的一个3维数组,也可以称为3阶矩阵.正是这个3阶矩阵和原矩阵相乘,从而得到新的变换矩阵.
更多参考见API:
http://developer.android.com/reference/android/graphics/Matrix.html
相关文章推荐
- 【Android】数据存储之Sharepreference
- android音乐播放器seekBar使用TimerTask问题
- Android进程通信Binder(1)-Binder进程通信的思想
- 关于android(安卓)servlet字符集兼容、乱码问题
- Android开发者指南-Property动画-Property Animation[原创译文]
- Android开发之使用DefaultHandler处理XML数据
- android 横竖屏切换
- Android中的Service全面总结(修正过)
- Android ListView 第一次设置Adapter时候getView调用多次
- java Class的Long id初始化 为0的问题android数据库操做出现的 android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
- Android LCD(四):LCD驱动调试篇
- Android 自定义shape图形效果
- 【Android】数据存储之SDcard
- 从Android document 中了解一下用API 杀死当前应用进程的问题
- Android2.3.5 vold个人总结
- Android开发者指南-传感器-概述[原创译文]
- Android开发者指南-传感器Sensor[原创译文]
- 仿飞鸽传书的Android版本
- Android开发者指南-用户界面-拖放-Drag and Drop[原创译文]
- Android LCD(三):Samsung LCD接口篇