From 2c0f232460146ddc259e8dcfebc69507368a23e9 Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 22 Jul 2016 03:54:40 +0800 Subject: [PATCH] Update --- CustomView/Advance/[9]Matrix_Basic.md | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 61d1eee..d22e1a1 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -16,7 +16,16 @@ > ### 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像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点,Matrix在此处的作用就是转换这些数值。 + +我们知道,Android中点视图是可以嵌套的树形结构,每一个子View都有自己的坐标系,但实际绘制时都应当转换为实际的屏幕坐标系才能正确的绘制,所以让每一个子View都有一个Matrix,这样每一个View就都拥有了转换坐标的能力,可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。 + +![](http://ww4.sinaimg.cn/large/005Xtdi2jw1f624vi3eb6j30rs0goab5.jpg) + ## 二、Matrix基本原理 @@ -78,15 +87,12 @@ $$) Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,不过我会尽量用通俗易懂的方式来帮助大家理解它。 -**Matrix 作为一个模型,实际上的作用就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子:** +## 四大常用操作 -我的的手机屏幕作为物理设备,其坐标系肯定是从左上角开始的,而且是不会改变的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系,通常情况下,我们的内容区和屏幕坐标系还相差一个通知栏和一个标题栏,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制。 +我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的四种画布操作(translate, scale, rotate, skew),这些操作的核心就是改变Matrix的数值,接下来我们看看这四种操作都会影响到哪些数值。 -假设通知栏高度为20像素,导航栏高度为40像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点,Matrix在此处的作用就是转换这些数值。 -我们知道,Android中点视图是可以嵌套的树形结构,每一个子View都有自己的坐标系,但实际绘制时都应当转换为实际的屏幕坐标系才能正确的绘制,所以让每一个子View都有一个Matrix,这样每一个View就都拥有了转换坐标的能力,可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。 -![](http://ww4.sinaimg.cn/large/005Xtdi2jw1f624vi3eb6j30rs0goab5.jpg)