This commit is contained in:
sloop
2016-07-22 03:54:40 +08:00
committed by GitHub
parent 8e39014116
commit 2c0f232460

View File

@@ -16,7 +16,16 @@
> >
### Matrix 的翻译过来是矩阵模型。和其释义相同Matrix是一个矩阵其作用则是一个模型一个控制视图状态的模型。 ### Matrix 的翻译过来是矩阵模型。和其释义相同Matrix是一个矩阵其作用则是一个模型一个控制视图状态的模型。
也就是说, 我们进行界面视图等转换都是需要依靠 Matrix 的帮助的,例如我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的画布操作,这些操作的核心就是改变 Matrix 的数值我们常见的可以用到Matrix的地方就是 canvas、 path、 bitmap 和 camera 等地方对于我们Android程序员来说只要是图形化界面展示就有Matrix在后台默默工作。 **Matrix 作为一个模型,主要功能就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子:**
我的的手机屏幕作为物理设备,其坐标系肯定是从左上角开始的,而且是不会改变的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系,通常情况下,我们的内容区和屏幕坐标系还相差一个通知栏和一个标题栏,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制。
假设通知栏高度为20像素导航栏高度为40像素,那么我们在内容区的(00)位置绘制一个点,最终就要转化为在实际坐标系中的(060)位置绘制一个点Matrix在此处的作用就是转换这些数值。
我们知道Android中点视图是可以嵌套的树形结构每一个子View都有自己的坐标系但实际绘制时都应当转换为实际的屏幕坐标系才能正确的绘制所以让每一个子View都有一个Matrix这样每一个View就都拥有了转换坐标的能力可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。
![](http://ww4.sinaimg.cn/large/005Xtdi2jw1f624vi3eb6j30rs0goab5.jpg)
## 二、Matrix基本原理 ## 二、Matrix基本原理
@@ -78,15 +87,12 @@ $$)
Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,不过我会尽量用通俗易懂的方式来帮助大家理解它。 Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,不过我会尽量用通俗易懂的方式来帮助大家理解它。
**Matrix 作为一个模型,实际上的作用就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子:** ## 四大常用操作
的的手机屏幕作为物理设备,其坐标系肯定是从左上角开始的,而且是不会改变的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系,通常情况下,我们的内容区和屏幕坐标系还相差一个通知栏和一个标题栏,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制 们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的四种画布操作(translate, scale, rotate, skew)这些操作的核心就是改变Matrix的数值接下来我们看看这四种操作都会影响到哪些数值
假设通知栏高度为20像素导航栏高度为40像素,那么我们在内容区的(00)位置绘制一个点,最终就要转化为在实际坐标系中的(060)位置绘制一个点Matrix在此处的作用就是转换这些数值。
我们知道Android中点视图是可以嵌套的树形结构每一个子View都有自己的坐标系但实际绘制时都应当转换为实际的屏幕坐标系才能正确的绘制所以让每一个子View都有一个Matrix这样每一个View就都拥有了转换坐标的能力可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。
![](http://ww4.sinaimg.cn/large/005Xtdi2jw1f624vi3eb6j30rs0goab5.jpg)