From 5885182064d24257da53867ef38f1eb724859991 Mon Sep 17 00:00:00 2001
From: sloop
+
+
+
勇敢的骚年啊,你是选择红药丸还是选择蓝药丸呢?
@@ -16,6 +17,7 @@
好了,言止于此,不能说更多了,下面开始我们本篇的正题。
+
-
-
-+
@@ -16,7 +15,7 @@![]()
好了,言止于此,不能说更多了,下面开始我们本篇的正题。 - +
From 5c67f4fa02330344f0a911e421de5157d381ef32 Mon Sep 17 00:00:00 2001 From: sloopDate: Sun, 26 Jun 2016 21:16:22 +0800 Subject: [PATCH 011/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index a93a2193..2a725841 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,25 +1,12 @@ # Matrix基础 -前面扯了四篇 Path 相关的内容,本次终于要到了大家期盼已久的 Matrix,没错,就是传说中的黑客帝国: +前面扯了四篇 Path 相关的内容,本次终于要到了大家期盼已久的 Matrix(传说中的黑客帝国!!!): - ---
-勇敢的骚年啊,你是选择红药丸还是选择蓝药丸呢? + -- -## 前言 - -如题,本篇的主角是 Matrix,在 Canvas 中很多地方都有 Matrix 的身影,如: 画布操作,drawBitmap,path 等。几乎无处不在,那么 Matrix 到底是干什么的呢? +实际上,在2D绘图这一部分,处处都有着 Matrix 的影响,这个如此厉害的 Matrix 到底是什么呢? > **Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。** From be7814f540e5e401118ea01bb2ea3b2833f8003a Mon Sep 17 00:00:00 2001 From: sloop-我选蓝色的,不要问我为什么。 -+如题,本篇的主角是 Matrix(并不是黑客帝国来着),我们之前在很多地方都见过 Matrix 的身影,如: 画布操作,drawBitmap,path 等。 -![]()
- -好了,言止于此,不能说更多了,下面开始我们本篇的正题。 -Date: Sun, 26 Jun 2016 21:17:24 +0800 Subject: [PATCH 012/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 2a725841..3a4ec47b 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -11,7 +11,7 @@ > **Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。** -我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过不少画布相关操作,这些操作的核心就是是操作 Matrix +我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过不少画布相关操作,这些操作的核心就是改变 Matrix 的数值。 ## Matrix方法表 From 62aeaad7893f60769e6570e62988a5aecb2d3c0f Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 26 Jun 2016 21:30:06 +0800 Subject: [PATCH 013/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 3a4ec47b..f3138dff 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -4,9 +4,11 @@  -如题,本篇的主角是 Matrix(并不是黑客帝国来着),我们之前在很多地方都见过 Matrix 的身影,如: 画布操作,drawBitmap,path 等。 +如题,本篇的主角是 Matrix(其实并不是黑客帝国来着)。 -实际上,在2D绘图这一部分,处处都有着 Matrix 的影响,这个如此厉害的 Matrix 到底是什么呢? +仔细会想一下,我们在很多地方都见过 Matrix(画布操作,drawBitmap,path 等), 感觉它就像是一个烦人家伙,什么事情都想插上一脚。 然而实际情况却并非如此, Matrix 一直都在我们看不到的地方默默付出着, 如果没有了 Matrix, 我们之前的很多方法都是无法运行的。 + +这么说来 Matrix 也算个厉害人物,那么这个 Matrix 到底是何方神圣呢? > **Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。** From c8d724268c5812d041f3841e7da0eea3589019c2 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 26 Jun 2016 21:32:11 +0800 Subject: [PATCH 014/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index f3138dff..dee17f77 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -6,14 +6,14 @@ 如题,本篇的主角是 Matrix(其实并不是黑客帝国来着)。 -仔细会想一下,我们在很多地方都见过 Matrix(画布操作,drawBitmap,path 等), 感觉它就像是一个烦人家伙,什么事情都想插上一脚。 然而实际情况却并非如此, Matrix 一直都在我们看不到的地方默默付出着, 如果没有了 Matrix, 我们之前的很多方法都是无法运行的。 +仔细回想一下,我们在很多地方都见过 Matrix(画布操作,drawBitmap,path 等), 感觉它就像是一个烦人家伙,什么事情都想插上一脚。 然而实际情况却并非如此, Matrix 一直都在我们看不到的地方默默付出着, 如果没有了 Matrix, 我们之前的很多方法都是无法运行的。 这么说来 Matrix 也算个厉害人物,那么这个 Matrix 到底是何方神圣呢? > **Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。** -我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过不少画布相关操作,这些操作的核心就是改变 Matrix 的数值。 +也就是说, 我们进行界面视图等转换都是需要依靠 Matrix 的帮助的,例如我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的画布操作,这些操作的核心就是改变 Matrix 的数值。 ## Matrix方法表 From 60a74ebcd57c4d4ba769c2de043e60cdd1cce224 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 26 Jun 2016 21:32:58 +0800 Subject: [PATCH 015/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index dee17f77..723d7fe9 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -11,7 +11,7 @@ 这么说来 Matrix 也算个厉害人物,那么这个 Matrix 到底是何方神圣呢? > -**Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。** +#### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 也就是说, 我们进行界面视图等转换都是需要依靠 Matrix 的帮助的,例如我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的画布操作,这些操作的核心就是改变 Matrix 的数值。 From 55350baaf4eb55f2813ecc80c8035a9a2ecbe8fe Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 26 Jun 2016 21:49:00 +0800 Subject: [PATCH 016/522] Merge * Update * Update * Update * Update * Update * Update * Update * Update * Update * Update * Update * Update --- CustomView/Advance/[9]Matrix_Basic.md | 40 +++++++++++---------------- 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 58085b49..723d7fe9 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,42 +1,34 @@ # Matrix基础 -前面扯了四篇 Path 相关的内容,本次终于要到了大家期盼已久的 Matrix,没错,就是传说中的黑客帝国: +前面扯了四篇 Path 相关的内容,本次终于要到了大家期盼已久的 Matrix(传说中的黑客帝国!!!):  -勇敢的骚年啊,你是选择红药丸还是选择蓝药丸呢? +如题,本篇的主角是 Matrix(其实并不是黑客帝国来着)。 -> -我选蓝色的,不要问我为什么。 +仔细回想一下,我们在很多地方都见过 Matrix(画布操作,drawBitmap,path 等), 感觉它就像是一个烦人家伙,什么事情都想插上一脚。 然而实际情况却并非如此, Matrix 一直都在我们看不到的地方默默付出着, 如果没有了 Matrix, 我们之前的很多方法都是无法运行的。 - - -好了,言止于此,不能说更多了,下面开始我们本篇的正题。 - -## 前言 - -如题,本篇的主角是 Matrix,在 Canvas 中很多地方都有 Matrix 的身影,如: 画布操作,drawBitmap,path 等。几乎无处不在,那么 Matrix 到底是干什么的呢? +这么说来 Matrix 也算个厉害人物,那么这个 Matrix 到底是何方神圣呢? > -**Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。** +#### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 -我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过不少画布相关操作,这些操作的核心就是是操作 Matrix +也就是说, 我们进行界面视图等转换都是需要依靠 Matrix 的帮助的,例如我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的画布操作,这些操作的核心就是改变 Matrix 的数值。 ## Matrix方法表 Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 -方法类别 | 相关API | 摘要 ----|---|--- -比较 | equals | 比较两个矩阵是否相同 -获取数值 | getValues | 获取矩阵的数值 -获取哈希值 | hashCode | 获取矩阵的哈希值 -获取逆矩阵 | invert | 如果矩阵可逆,获取其逆矩阵 -是否是仿射矩阵 | isAffine |判断是否是仿射矩阵 -是否是单位矩阵 | isIdentity | 判断是否是单位矩阵 -获取变换后位置 | mapPoints | 计算一个点在变换后点的位置 -获取变换后位置 | mapRect | 计算一个矩形变换后点位置 -获取变换后位置 | mapVectors | 计算一个向量阵列变换后点位置 +方法类别 | 相关API | 摘要 +-----------|---------------------------------------------------------|------------------------------------- +比较方法 | equals hashCode | 比较、 获取哈希值 +基本方法 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 +矩阵相关 | invert isAffine isIdentity | 计算逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 +数值计算 | mapPoints mapRect mapVectors | 计算 点、 矩形、 阵列 经过变换后点位置 +设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 +前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 +后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 + From 930c0c72561efb8a8dd6e459485b101eed83064d Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 26 Jun 2016 22:16:19 +0800 Subject: [PATCH 017/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 723d7fe9..837bac4f 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -20,14 +20,15 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 方法类别 | 相关API | 摘要 ------------|---------------------------------------------------------|------------------------------------- +-----------|---------------------------------------------------------|------------------------ 比较方法 | equals hashCode | 比较、 获取哈希值 -基本方法 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 -矩阵相关 | invert isAffine isIdentity | 计算逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 -数值计算 | mapPoints mapRect mapVectors | 计算 点、 矩形、 阵列 经过变换后点位置 +基本方法 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 +数值计算 | mapPoints mapRect mapVectors | 计算变换后的数值 设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 +特殊方法 | invert isAffine isIdentity | 逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 +其它方法 | From dc1d2a1c870c848d34b604163a4fdcdfff2450a3 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 26 Jun 2016 22:20:36 +0800 Subject: [PATCH 018/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 837bac4f..c4ea87a3 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -23,12 +23,12 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 -----------|---------------------------------------------------------|------------------------ 比较方法 | equals hashCode | 比较、 获取哈希值 基本方法 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 -数值计算 | mapPoints mapRect mapVectors | 计算变换后的数值 +数值计算 | mapPoints mapRadius mapRect mapVectors | 计算变换后的数值 设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 -特殊方法 | invert isAffine isIdentity | 逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 -其它方法 | +特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 +其它方法 | invert isAffine isIdentity toString toShortString | 逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 ... From 5c3bf7a703615009f54f56b459a37849afe146c8 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 26 Jun 2016 22:28:43 +0800 Subject: [PATCH 019/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index c4ea87a3..b7aff4bd 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -27,8 +27,8 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 -特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 -其它方法 | invert isAffine isIdentity toString toShortString | 逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 ... +特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 +其它方法 | invert isAffine isIdentity toString toShortString | 逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 ... From dd803c2e58a5c84a2b933bf75605e4c8fb409264 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 26 Jun 2016 22:31:43 +0800 Subject: [PATCH 020/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index b7aff4bd..589ffea3 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -27,8 +27,9 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 -特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 -其它方法 | invert isAffine isIdentity toString toShortString | 逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 ... +特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 +其它方法 | invert isAffine isIdentity toString toShortString | 逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 ... + From 2a887c29dda239cec980574fed7fd3e93bba67e9 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 26 Jun 2016 23:14:36 +0800 Subject: [PATCH 021/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 589ffea3..3aca64f4 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -30,6 +30,7 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 其它方法 | invert isAffine isIdentity toString toShortString | 逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 ... +## Matrix原理 From 2d07b45701853d9695042c6af2b0e77b9d96a189 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 27 Jun 2016 12:48:38 +0800 Subject: [PATCH 022/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 3aca64f4..47d99cc1 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -6,7 +6,7 @@ 如题,本篇的主角是 Matrix(其实并不是黑客帝国来着)。 -仔细回想一下,我们在很多地方都见过 Matrix(画布操作,drawBitmap,path 等), 感觉它就像是一个烦人家伙,什么事情都想插上一脚。 然而实际情况却并非如此, Matrix 一直都在我们看不到的地方默默付出着, 如果没有了 Matrix, 我们之前的很多方法都是无法运行的。 +仔细回想一下,我们在很多地方都见过 Matrix(画布操作,drawBitmap,path 等), 感觉它就像是一个烦人家伙,什么事情都想插上一脚。 然而实际情况却并非如此, Matrix 一直都在我们没有注意到到地方默默付出着, 如果没有了 Matrix, 我们之前的很多方法都是无法运行的。 这么说来 Matrix 也算个厉害人物,那么这个 Matrix 到底是何方神圣呢? From c8bf3bb1446ebafd571ee898fe3f3c0b40ce17af Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 27 Jun 2016 19:47:50 +0800 Subject: [PATCH 023/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 3aca64f4..f14b0567 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -32,6 +32,7 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 ## Matrix原理 +Matrix 本质是一个 3 x 3 的矩阵。 From eaa78a867998b1e060b351dad620cf9eacc5d349 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 27 Jun 2016 19:49:29 +0800 Subject: [PATCH 024/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 47d99cc1..b5847b9f 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -32,7 +32,7 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 ## Matrix原理 - +Matrix 本质是一个 3x3 的矩阵。 From 0250af36a437f593735a4f970c86628ce07a9b24 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 27 Jun 2016 21:51:32 +0800 Subject: [PATCH 025/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 76760315..076aae58 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -21,14 +21,14 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 方法类别 | 相关API | 摘要 -----------|---------------------------------------------------------|------------------------ -比较方法 | equals hashCode | 比较、 获取哈希值 -基本方法 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 -数值计算 | mapPoints mapRadius mapRect mapVectors | 计算变换后的数值 +基本方法 | equals hashCode toString toShortString | 比较、 获取哈希值、 转换为字符串 +数值操作 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 -特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 -其它方法 | invert isAffine isIdentity toString toShortString | 逆矩阵、 是否是仿射矩阵、 是否是单位矩阵 ... +数值计算 | mapPoints mapRadius mapRect mapVectors | 计算变换后的数值 +特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 +矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... ## Matrix原理 From 03eb8c6ea3375439477e429ac0360f0b75954cc5 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 28 Jun 2016 15:49:34 +0800 Subject: [PATCH 026/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 076aae58..ee6b08ae 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -33,7 +33,7 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 ## Matrix原理 -Matrix 本质是一个 3x3 的矩阵。 +Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图状态的不同内容。 From dac6f430989127b059379a9157a558140b9e0cbb Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 2 Jul 2016 23:09:12 +0800 Subject: [PATCH 027/522] Update --- CustomView/Advance/[7]Path_Over.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[7]Path_Over.md b/CustomView/Advance/[7]Path_Over.md index b8c3afde..88cbd1b7 100644 --- a/CustomView/Advance/[7]Path_Over.md +++ b/CustomView/Advance/[7]Path_Over.md @@ -171,7 +171,7 @@ toggleInverseFillType | 切换填充规则(即原有规则与反向规则之 Path path = new Path(); // 创建Path //path.setFillType(Path.FillType.EVEN_ODD); // 设置Path填充模式为 奇偶规则 - path.setFillType(Path.FillType.INVERSE_WINDING); // 反奇偶规则 + path.setFillType(Path.FillType.INVERSE_EVEN_ODD); // 反奇偶规则 path.addRect(-200,-200,200,200, Path.Direction.CW); // 给Path中添加一个矩形 ``` From 45cc090e9929cfcacf9e530b2a8f4333ed1d9a79 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 3 Jul 2016 18:49:36 +0800 Subject: [PATCH 028/522] Update --- QuickChart/Matrix.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 QuickChart/Matrix.md diff --git a/QuickChart/Matrix.md b/QuickChart/Matrix.md new file mode 100644 index 00000000..01bf7cb8 --- /dev/null +++ b/QuickChart/Matrix.md @@ -0,0 +1 @@ +# Matrix常用操作速查表 From 3be6e26a7a51df704303f40b7fef8471a1603f3a Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 3 Jul 2016 18:50:33 +0800 Subject: [PATCH 029/522] Update --- QuickChart/Path.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/QuickChart/Path.md b/QuickChart/Path.md index e55947dd..2310b2c6 100644 --- a/QuickChart/Path.md +++ b/QuickChart/Path.md @@ -22,3 +22,10 @@ rXxx方法 | rMoveTo, rLineTo, rQuadTo, rCubicTo | **不带r的方法是 重置路径 | reset, rewind | 清除Path中的内容
**reset不保留内部数据结构,但会保留FillType.**
**rewind会保留内部的数据结构,但不保留FillType** 矩阵操作 | transform | 矩阵变换 +## 相关文章 + +* []() +* []() +* []() +* []() + From 83f9ed43fe7074e60fcf5660099ac7bf33052453 Mon Sep 17 00:00:00 2001 From: sloopDate: Sun, 3 Jul 2016 18:52:37 +0800 Subject: [PATCH 030/522] Update --- QuickChart/Path.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/QuickChart/Path.md b/QuickChart/Path.md index 2310b2c6..6ed41739 100644 --- a/QuickChart/Path.md +++ b/QuickChart/Path.md @@ -24,8 +24,8 @@ rXxx方法 | rMoveTo, rLineTo, rQuadTo, rCubicTo | **不带r的方法是 ## 相关文章 -* []() -* []() -* []() -* []() +* [Path基本操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B5%5DPath_Basic.md) +* [贝塞尔曲线](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B6%5DPath_Bezier.md) +* [Path完结篇(伪)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B7%5DPath_Over.md) +* [Path玩出花样](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B8%5DPath_Play.md) From 7c4c52e8f29224f890edc9a5dc310cc78d393094 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 9 Jul 2016 09:14:51 +0800 Subject: [PATCH 031/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index ee6b08ae..16162b7e 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -33,7 +33,7 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 ## Matrix原理 -Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图状态的不同内容。 +Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图状态的不同内容,我们对视图的操作最终都是改变Matrix里面的数值。 From 1e3934f8c87856499e88e75b910f387f44b3f1f7 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 17 Jul 2016 23:49:40 +0800 Subject: [PATCH 032/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 16162b7e..5ad85355 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,14 +1,12 @@ # Matrix基础 -前面扯了四篇 Path 相关的内容,本次终于要到了大家期盼已久的 Matrix(传说中的黑客帝国!!!): +前面扯了四篇 Path 相关的内容,本次终于要到了大家期盼已久的黑客帝国!  -如题,本篇的主角是 Matrix(其实并不是黑客帝国来着)。 +如题,本篇的主角是 Matrix(并不是黑客帝国)。 -仔细回想一下,我们在很多地方都见过 Matrix(画布操作,drawBitmap,path 等), 感觉它就像是一个烦人家伙,什么事情都想插上一脚。 然而实际情况却并非如此, Matrix 一直都在我们没有注意到到地方默默付出着, 如果没有了 Matrix, 我们之前的很多方法都是无法运行的。 - -这么说来 Matrix 也算个厉害人物,那么这个 Matrix 到底是何方神圣呢? +我们在之前的很多文章中都提及过它,但并没有仔细的介绍过,从本篇开始正式介绍它了,这个在2D绘图中十分重要的角色Matrix。 > #### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 From 6ad8bde1c459cf3f7c2e44b1036f615521e076be Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 17 Jul 2016 23:52:31 +0800 Subject: [PATCH 033/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 5ad85355..8ce3d602 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,12 +1,12 @@ # Matrix基础 -前面扯了四篇 Path 相关的内容,本次终于要到了大家期盼已久的黑客帝国! +前面讲了四篇 Path 相关的内容,本次终于要到了大家期盼已久的黑客帝国!  如题,本篇的主角是 Matrix(并不是黑客帝国)。 -我们在之前的很多文章中都提及过它,但并没有仔细的介绍过,从本篇开始正式介绍它了,这个在2D绘图中十分重要的角色Matrix。 +它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D绘图中十分重要的角色 -- Matrix。 > #### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 From 343aa4ad31cf3d9943429d6c3df4ff72b33ef099 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 17 Jul 2016 23:54:02 +0800 Subject: [PATCH 034/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 8ce3d602..8aa48f65 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -28,8 +28,8 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... -## Matrix原理 +## Matrix原理 Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图状态的不同内容,我们对视图的操作最终都是改变Matrix里面的数值。 From 8703d71aaede2e32905236ca03294b09854e0001 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 17 Jul 2016 23:57:42 +0800 Subject: [PATCH 035/522] Update --- {Question => ChaosCrystal}/HowToViewAPISourceOnline.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename {Question => ChaosCrystal}/HowToViewAPISourceOnline.md (100%) diff --git a/Question/HowToViewAPISourceOnline.md b/ChaosCrystal/HowToViewAPISourceOnline.md similarity index 100% rename from Question/HowToViewAPISourceOnline.md rename to ChaosCrystal/HowToViewAPISourceOnline.md From 120c6fd81ba0ebc4eaa1cd0372abb837d794d1b5 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 00:06:59 +0800 Subject: [PATCH 036/522] Update --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 9e2226bf..4c354d0d 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,11 @@ 02 | [Path常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Path.md) 03 | [贝塞尔曲线常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Bezier.md) +## [混沌水晶](https://github.com/GcsSloop/AndroidNote/tree/master/ChaosCrystal) + +序号 | 内容 +:---:|--------------- + 01 | [在线查看Android API源码](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/HowToViewAPISourceOnline.md) ## About Me From f4137aa76f5854c4d5a694716eeec0f93698ff6c Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 00:08:03 +0800 Subject: [PATCH 037/522] Update --- ChaosCrystal/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 ChaosCrystal/README.md diff --git a/ChaosCrystal/README.md b/ChaosCrystal/README.md new file mode 100644 index 00000000..3881df81 --- /dev/null +++ b/ChaosCrystal/README.md @@ -0,0 +1,5 @@ +# 混沌水晶 + +序号 | 内容 +:---:|--------------- + 01 | [在线查看Android API源码](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/HowToViewAPISourceOnline.md) From b17c9c93ef1719e785db0b71cfc02909a50770b7 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 00:19:15 +0800 Subject: [PATCH 038/522] Update --- ChaosCrystal/README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ChaosCrystal/README.md b/ChaosCrystal/README.md index 3881df81..f2d3abfa 100644 --- a/ChaosCrystal/README.md +++ b/ChaosCrystal/README.md @@ -1,4 +1,6 @@ -# 混沌水晶 + + +# 混沌水晶 序号 | 内容 :---:|--------------- From 2806a91e62c5b6f8b87c5d80b68b7eeaf31fba31 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 00:40:35 +0800 Subject: [PATCH 039/522] Update --- ChaosCrystal/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ChaosCrystal/README.md b/ChaosCrystal/README.md index f2d3abfa..2514ba44 100644 --- a/ChaosCrystal/README.md +++ b/ChaosCrystal/README.md @@ -2,6 +2,8 @@ # 混沌水晶 +混沌水晶本身并没有太大功效,但与其他物品合成之后可能产生质的变化。 + 序号 | 内容 :---:|--------------- 01 | [在线查看Android API源码](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/HowToViewAPISourceOnline.md) From 9d5b3dd51904f3d1ce6159e7dee9721bfe4e521b Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 02:48:30 +0800 Subject: [PATCH 040/522] Update --- ...5\277\253\346\215\267\351\224\256(Mac).md" | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 "ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" diff --git "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" new file mode 100644 index 00000000..beb887cd --- /dev/null +++ "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" @@ -0,0 +1,21 @@ +# AndroidStudio常用快捷键(Mac) + +快捷键 | 作用 +---|--- +Option + Enter | 自动修正 +Command + N | 自动生成代码(Getter Setter) +Command + Alt + L | 格式化代码 +Command + Alt + T | 把选中的代码放在 try{} 、if{} 、 else{} 里 +Command + / | 注释 // +Command + Shift + / | 注释 /* */ +Command + Shift + Up/Down | 语句上下移动 +Option + Shift + Up/Down | 内容上下移动 +Option + Command + M | 将选中代码块封装成一个方法 +Command + D | 复制当前一行(或选择区域),并粘贴到下面 +Command + Z | 后退 +Command + Shift + Z | 前进 +Control + Alt + O | 优化导入的包 +Ctrl(Command)+ - / + | 折叠/展开代码 +Ctrl(Command)+Shift+ - / + | 折叠/展开全部代码 +Ctrl(Command)+Shift+. | 折叠/展开当前花括号中的代码 + From 09018ce2886b587141c1a36d54a41ae26815c5f5 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 02:50:34 +0800 Subject: [PATCH 041/522] Update --- ...5\277\253\346\215\267\351\224\256(Mac).md" | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" index beb887cd..68c18fe9 100644 --- "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" +++ "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" @@ -1,21 +1,21 @@ # AndroidStudio常用快捷键(Mac) -快捷键 | 作用 ----|--- -Option + Enter | 自动修正 -Command + N | 自动生成代码(Getter Setter) -Command + Alt + L | 格式化代码 -Command + Alt + T | 把选中的代码放在 try{} 、if{} 、 else{} 里 -Command + / | 注释 // -Command + Shift + / | 注释 /* */ -Command + Shift + Up/Down | 语句上下移动 -Option + Shift + Up/Down | 内容上下移动 -Option + Command + M | 将选中代码块封装成一个方法 -Command + D | 复制当前一行(或选择区域),并粘贴到下面 -Command + Z | 后退 -Command + Shift + Z | 前进 -Control + Alt + O | 优化导入的包 -Ctrl(Command)+ - / + | 折叠/展开代码 -Ctrl(Command)+Shift+ - / + | 折叠/展开全部代码 -Ctrl(Command)+Shift+. | 折叠/展开当前花括号中的代码 +快捷键 | 作用 +----------------------------|----------------------------------------------- +Option + Enter | 自动修正 +Command + N | 自动生成代码(Getter Setter) +Command + Alt + L | 格式化代码 +Command + Alt + T | 把选中的代码放在 try{} 、if{} 、 else{} 里 +Command + / | 注释 // +Command + Shift + / | 注释 /* */ +Command + Shift + Up/Down | 语句上下移动 +Option + Shift + Up/Down | 内容上下移动 +Option + Command + M | 将选中代码块封装成一个方法 +Command + D | 复制当前一行(或选择区域),并粘贴到下面 +Command + Z | 后退 +Command + Shift + Z | 前进 +Control + Alt + O | 优化导入的包 +Ctrl(Command)+ - / + | 折叠/展开代码 +Ctrl(Command)+Shift+ - / + | 折叠/展开全部代码 +Ctrl(Command)+Shift+. | 折叠/展开当前花括号中的代码 From 54fc0a1b88dc2729e3b0c45f417638e19ec31294 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 02:52:09 +0800 Subject: [PATCH 042/522] Update --- ...270\347\224\250\345\221\275\344\273\244.md" | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 "ChaosCrystal/ADB\345\270\270\347\224\250\345\221\275\344\273\244.md" diff --git "a/ChaosCrystal/ADB\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/ChaosCrystal/ADB\345\270\270\347\224\250\345\221\275\344\273\244.md" new file mode 100644 index 00000000..f5ab0017 --- /dev/null +++ "b/ChaosCrystal/ADB\345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -0,0 +1,18 @@ +# ADB常用命令 + +命令 | 说明 +--- | --- +adb start-server | 启动服务 +adb kill-server | 关闭服务 +adb devices | 显示当前连接的所有设备(如果服务没有开启会自动开启) +adb install xxx.apk | 将应用安装进设备中 +adb uninstall <包名> | 卸载应用 +adb -s <设备名> <命令> | 如果有多个设备,指定某一个设备进行操作 +adb pull <手机文件> <电脑文件> | 将手机内文件导入到电脑上(文件名均为全称) +adb push <电脑文件> <手机文件> | 将电脑中文件推送到手机上(文件名均为全称) +adb shell | 进入手机命令行终端 + ┗ ls | 查看目录列表 + ┗ ls -l | 显示详细信息(权限 用户名 组名 时间 包名) + ┗ ps | 当前正在运行的进程 + ┗ ping | 手机的网络连通性 + From b050c19010f6eae9d8bf66a10340328577deede6 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 02:53:24 +0800 Subject: [PATCH 043/522] Update --- ...70\347\224\250\345\221\275\344\273\244.md" | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git "a/ChaosCrystal/ADB\345\270\270\347\224\250\345\221\275\344\273\244.md" "b/ChaosCrystal/ADB\345\270\270\347\224\250\345\221\275\344\273\244.md" index f5ab0017..bdab36c6 100644 --- "a/ChaosCrystal/ADB\345\270\270\347\224\250\345\221\275\344\273\244.md" +++ "b/ChaosCrystal/ADB\345\270\270\347\224\250\345\221\275\344\273\244.md" @@ -1,18 +1,18 @@ # ADB常用命令 -命令 | 说明 ---- | --- -adb start-server | 启动服务 -adb kill-server | 关闭服务 -adb devices | 显示当前连接的所有设备(如果服务没有开启会自动开启) -adb install xxx.apk | 将应用安装进设备中 -adb uninstall <包名> | 卸载应用 -adb -s <设备名> <命令> | 如果有多个设备,指定某一个设备进行操作 +命令 | 说明 +--------------------------------|----------------------------------------------------- +adb start-server | 启动服务 +adb kill-server | 关闭服务 +adb devices | 显示当前连接的所有设备(如果服务没有开启会自动开启) +adb install xxx.apk | 将应用安装进设备中 +adb uninstall <包名> | 卸载应用 +adb -s <设备名> <命令> | 如果有多个设备,指定某一个设备进行操作 adb pull <手机文件> <电脑文件> | 将手机内文件导入到电脑上(文件名均为全称) adb push <电脑文件> <手机文件> | 将电脑中文件推送到手机上(文件名均为全称) -adb shell | 进入手机命令行终端 - ┗ ls | 查看目录列表 - ┗ ls -l | 显示详细信息(权限 用户名 组名 时间 包名) - ┗ ps | 当前正在运行的进程 - ┗ ping | 手机的网络连通性 +adb shell | 进入手机命令行终端 + ┗ ls | 查看目录列表 + ┗ ls -l | 显示详细信息(权限 用户名 组名 时间 包名) + ┗ ps | 当前正在运行的进程 + ┗ ping | 手机的网络连通性 From 21dfcf91012807d6e20df05cfba7269d1b77eb0a Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 02:56:35 +0800 Subject: [PATCH 044/522] Update --- ...344\270\216GIF\345\210\266\344\275\234.md" | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 "ChaosCrystal/\345\275\225\345\261\217\344\270\216GIF\345\210\266\344\275\234.md" diff --git "a/ChaosCrystal/\345\275\225\345\261\217\344\270\216GIF\345\210\266\344\275\234.md" "b/ChaosCrystal/\345\275\225\345\261\217\344\270\216GIF\345\210\266\344\275\234.md" new file mode 100644 index 00000000..4613d0e2 --- /dev/null +++ "b/ChaosCrystal/\345\275\225\345\261\217\344\270\216GIF\345\210\266\344\275\234.md" @@ -0,0 +1,65 @@ +# 录屏与GIF制作 + +## 说明 +在实际工作或学习过程中,很多地方都需要展示一些过程,或者展示动态的效果,使用视频显得比较大了,而且也不利于分享,故使用GIF就是一种很好的方法,体积小,易于分享展示。 + +## 制作GIF的方法 +> 此处大部分参考自 廖祜秋(我们的秋百万大哥) 整理的内容: [Make GIF Snapshot for Android APP](http://www.liaohuqiu.net/posts/make-gif-for-android-app/) + +制作GIF一般分为以下两种情况: + +类别 | 说明 | 备注 +--- | --- | --- +第一种 | 在电脑上可以看到效果 | 在模拟器中运行的app,视频等 +第二种 | 在手机上可以看到效果 | 在真机中运行的app + +### 第一种的制作方法 +第一种方法比较容易直接录制屏幕然后转换为GIF就行了,有很多可视化的制作软件,这里推荐几种: + +名称 | 说明 | 地址 + --- | --- | --- +都叫兽GIF | 可视化GIF制作工具,支持录制后再次编辑,不同程度压缩,添加水印等功能,但默认右下角有一个都叫兽的水印,不适合强迫症患者 | [都叫兽GIF](http://www.reneelab.com.cn)
[Windows直接下载](http://www.reneelab.com.cn/download-center/renee-gifer) +LICEcap | 可视化GIF制作工具,支持编辑录制区域大小,可改变录制帧率,功能没有上面多,但用起来很简单 | [LICEcap](http://www.cockos.com/licecap/)
[Windows直接下载](http://www.cockos.com/licecap/licecap123-install.exe) +ezgif | 在线制作GIF的工具,这个的功能也很强大,支持将多张图片合成为GIF,将视频转换为GIF,剪切旋转等多种操作 | [ezgif](http://ezgif.com/) + +## 第二种的制作方法 +虽然手机上也有一些录屏GIF制作软件,但是大部分都很渣,很难达到我们想要的效果。 + +我个人一般是将操作过程录制下来,然后发送到电脑上,用电脑软件截取GIF,也就是转为第一种方法。 + +### 录制手机操作的方法 + +#### 通过AndroidStudio录屏工具: + +这个用起来很方便,录制后能直接保存在电脑上。 + + + +1.选到该选项卡 + +2.上面一个按钮是截屏,下面一个按钮是录屏。 + +#### 通过ADB命令: + +作为一个程序猿,虽然可视化操作很爽,但不会两条命令怎么能装逼呢。下面就教大家如何用命令录屏。 + +``` shell +$ adb shell // 进入shell +shell@ $ screenrecord --verbose /sdcard/demo.mp4 // 开始录制(保存到内存卡上) +(press Ctrl-C to stop) // 按Ctrl+C结束录制 +shell@ $ exit // 结束录制 +$ adb pull /sdcard/demo.mp4 // 将内存卡中的文件传到电脑上 +``` +**[更多ADB命令看这里](http://developer.android.com/tools/help/shell.html#screenrecord)** + +#### 通过Python命令录制 + +虽说是Python命令,但是底层调用的依旧是adb,内部实现依赖了ffmpeg。 + +**详情请参考RoboGif的文档->[RoboGif](https://github.com/GcsSloop/RoboGif)** + +如果你对Python还不了解,可以到这里学习一下Python的基础知识:**[PythonNote](https://github.com/GcsSloop/PythonNote)** + + + + From 5874b0da4fc33fdb727476ac9f05c93bed306708 Mon Sep 17 00:00:00 2001 From: sloopDate: Mon, 18 Jul 2016 19:30:05 +0800 Subject: [PATCH 045/522] Update --- ChaosCrystal/README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ChaosCrystal/README.md b/ChaosCrystal/README.md index 2514ba44..e685b450 100644 --- a/ChaosCrystal/README.md +++ b/ChaosCrystal/README.md @@ -7,3 +7,6 @@ 序号 | 内容 :---:|--------------- 01 | [在线查看Android API源码](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/HowToViewAPISourceOnline.md) + 02 | [ADB常用命令](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/ADB%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.md) + 03 | [AndroidStudio常用快捷键(Mac)](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/AndroidStudio%E5%B8%B8%E7%94%A8%E5%BF%AB%E6%8D%B7%E9%94%AE(Mac).md) + 04 | [录屏与GIF制作](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/%E5%BD%95%E5%B1%8F%E4%B8%8EGIF%E5%88%B6%E4%BD%9C.md) From c18256f3dc4725521eccaa8018688cc9aa1b5c46 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 19:31:10 +0800 Subject: [PATCH 046/522] Update --- ChaosCrystal/README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ChaosCrystal/README.md b/ChaosCrystal/README.md index e685b450..10db8eba 100644 --- a/ChaosCrystal/README.md +++ b/ChaosCrystal/README.md @@ -6,7 +6,9 @@ 序号 | 内容 :---:|--------------- - 01 | [在线查看Android API源码](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/HowToViewAPISourceOnline.md) - 02 | [ADB常用命令](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/ADB%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.md) - 03 | [AndroidStudio常用快捷键(Mac)](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/AndroidStudio%E5%B8%B8%E7%94%A8%E5%BF%AB%E6%8D%B7%E9%94%AE(Mac).md) - 04 | [录屏与GIF制作](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/%E5%BD%95%E5%B1%8F%E4%B8%8EGIF%E5%88%B6%E4%BD%9C.md) + 01 | [AndroidStudio常用快捷键(Mac)](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/AndroidStudio%E5%B8%B8%E7%94%A8%E5%BF%AB%E6%8D%B7%E9%94%AE(Mac).md) + 02 | [在线查看Android API源码](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/HowToViewAPISourceOnline.md) + 03 | [录屏与GIF制作](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/%E5%BD%95%E5%B1%8F%E4%B8%8EGIF%E5%88%B6%E4%BD%9C.md) + 04 | [ADB常用命令](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/ADB%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.md) + + From 2150b361deb261489c679c72e4b3a26bf1ca7993 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 19:32:23 +0800 Subject: [PATCH 047/522] Update --- ...p\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" | 1 + 1 file changed, 1 insertion(+) create mode 100644 "ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" diff --git "a/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" "b/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" new file mode 100644 index 00000000..97fdddd3 --- /dev/null +++ "b/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" @@ -0,0 +1 @@ +# Android中dip、dp、sp、pt和px From 46ec6028213ff291e814b3e306d13d8c305c557e Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 19:32:47 +0800 Subject: [PATCH 048/522] Update --- ...\200\201sp\343\200\201pt\345\222\214px.md" | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) diff --git "a/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" "b/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" index 97fdddd3..51ce9556 100644 --- "a/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" +++ "b/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" @@ -1 +1,77 @@ # Android中dip、dp、sp、pt和px + +概念区别: + +单位 | 含义 +--- | --- +dip | device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA **推荐使用这个,不依赖像素**。 +dp | 同上,和dip一样。 +px | pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素。 +sp | scaled pixels(放大像素). 主要用于字体显示best for textsize。 +pt | point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用。 +in | (英寸):长度单位。 +mm | (毫米):长度单位。 + +单位转换: +``` java +/** + * dp、sp 转换为 px 的工具类 + * + * @author fxsky 2012.11.12 + * + */ +public class DisplayUtil { + /** + * 将px值转换为dip或dp值,保证尺寸大小不变 + * + * @param pxValue + * @param scale + * (DisplayMetrics类中属性density) + * @return + */ + public static int px2dip(Context context, float pxValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / scale + 0.5f); + } + + /** + * 将dip或dp值转换为px值,保证尺寸大小不变 + * + * @param dipValue + * @param scale + * (DisplayMetrics类中属性density) + * @return + */ + public static int dip2px(Context context, float dipValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dipValue * scale + 0.5f); + } + + /** + * 将px值转换为sp值,保证文字大小不变 + * + * @param pxValue + * @param fontScale + * (DisplayMetrics类中属性scaledDensity) + * @return + */ + public static int px2sp(Context context, float pxValue) { + final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; + return (int) (pxValue / fontScale + 0.5f); + } + + /** + * 将sp值转换为px值,保证文字大小不变 + * + * @param spValue + * @param fontScale + * (DisplayMetrics类中属性scaledDensity) + * @return + */ + public static int sp2px(Context context, float spValue) { + final float fontScale = context.getResources().getDisplayMetrics().scaledDensity; + return (int) (spValue * fontScale + 0.5f); + } +} +``` + From ccf7c1fd2d14e150e0c6817920eaaa1e716ae4f7 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 18 Jul 2016 19:35:19 +0800 Subject: [PATCH 049/522] Update --- ChaosCrystal/README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/ChaosCrystal/README.md b/ChaosCrystal/README.md index 10db8eba..7fe21f18 100644 --- a/ChaosCrystal/README.md +++ b/ChaosCrystal/README.md @@ -4,11 +4,10 @@ 混沌水晶本身并没有太大功效,但与其他物品合成之后可能产生质的变化。 -序号 | 内容 -:---:|--------------- - 01 | [AndroidStudio常用快捷键(Mac)](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/AndroidStudio%E5%B8%B8%E7%94%A8%E5%BF%AB%E6%8D%B7%E9%94%AE(Mac).md) - 02 | [在线查看Android API源码](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/HowToViewAPISourceOnline.md) - 03 | [录屏与GIF制作](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/%E5%BD%95%E5%B1%8F%E4%B8%8EGIF%E5%88%B6%E4%BD%9C.md) - 04 | [ADB常用命令](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/ADB%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.md) +* [Android中dip、dp、sp、pt和px](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/Android%E4%B8%ADdip%E3%80%81dp%E3%80%81sp%E3%80%81pt%E5%92%8Cpx.md) +* [AndroidStudio常用快捷键(Mac)](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/AndroidStudio%E5%B8%B8%E7%94%A8%E5%BF%AB%E6%8D%B7%E9%94%AE(Mac).md) +* [在线查看Android API源码](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/HowToViewAPISourceOnline.md) +* [录屏与GIF制作](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/%E5%BD%95%E5%B1%8F%E4%B8%8EGIF%E5%88%B6%E4%BD%9C.md) +* [ADB常用命令](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/ADB%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.md) From 81e79c65af8a3935b12b0f0b92fa476546351a95 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 19 Jul 2016 02:32:37 +0800 Subject: [PATCH 050/522] Update --- README.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 4c354d0d..2bbcb2b3 100644 --- a/README.md +++ b/README.md @@ -45,9 +45,14 @@ ## [混沌水晶](https://github.com/GcsSloop/AndroidNote/tree/master/ChaosCrystal) -序号 | 内容 -:---:|--------------- - 01 | [在线查看Android API源码](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/HowToViewAPISourceOnline.md) +混沌水晶本身并没有太大功效,但与其他物品合成之后可能产生质的变化。 + +* [Android中dip、dp、sp、pt和px](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/Android%E4%B8%ADdip%E3%80%81dp%E3%80%81sp%E3%80%81pt%E5%92%8Cpx.md) +* [AndroidStudio常用快捷键(Mac)](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/AndroidStudio%E5%B8%B8%E7%94%A8%E5%BF%AB%E6%8D%B7%E9%94%AE(Mac).md) +* [在线查看Android API源码](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/HowToViewAPISourceOnline.md) +* [录屏与GIF制作](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/%E5%BD%95%E5%B1%8F%E4%B8%8EGIF%E5%88%B6%E4%BD%9C.md) +* [ADB常用命令](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/ADB%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.md) + ## About Me From 1ca06fcea7d091235c5e16455761c2e12de9ac90 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 19 Jul 2016 03:47:11 +0800 Subject: [PATCH 051/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 8aa48f65..24aa13a0 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -31,7 +31,9 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 ## Matrix原理 -Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图状态的不同内容,我们对视图的操作最终都是改变Matrix里面的数值。 +Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图的不同属性,大致如下: + + From d0446e249bd16244a6c2ebd30dd5290de0769c3a Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 19 Jul 2016 03:51:20 +0800 Subject: [PATCH 052/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 24aa13a0..5da1c40d 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -33,7 +33,11 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图的不同属性,大致如下: - + | 0 | 1 | 2 +---|-----------|-----------|---------- + 0 | MSSCALE_X | MSKEW_X | MTRANS_X + 1 | MSSCALE_X | MSKEW_X | MTRANS_X + 2 | MPERSRP_0 | MPERSRP_1 | MPERSRP_2 From d734553ecc81df60ff7d96bd46eccbd5e5431040 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 19 Jul 2016 04:33:23 +0800 Subject: [PATCH 053/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 5da1c40d..52aa510b 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -36,7 +36,7 @@ Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制 | 0 | 1 | 2 ---|-----------|-----------|---------- 0 | MSSCALE_X | MSKEW_X | MTRANS_X - 1 | MSSCALE_X | MSKEW_X | MTRANS_X + 1 | MSKEW_Y | MSSCALE_Y | MTRANS_Y 2 | MPERSRP_0 | MPERSRP_1 | MPERSRP_2 From 282f79ae5dffd6529fc2e8822f5374fad688bdd0 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 19 Jul 2016 04:51:48 +0800 Subject: [PATCH 054/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 52aa510b..80f87ae1 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -37,7 +37,7 @@ Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制 ---|-----------|-----------|---------- 0 | MSSCALE_X | MSKEW_X | MTRANS_X 1 | MSKEW_Y | MSSCALE_Y | MTRANS_Y - 2 | MPERSRP_0 | MPERSRP_1 | MPERSRP_2 + 2 | MPERSP_0 | MPERSP_1 | MPERSP_2 From 897a36bf1d1f0778ef3a58fda2269b01ece1773c Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 19 Jul 2016 21:36:45 +0800 Subject: [PATCH 055/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 80f87ae1..80f43a8e 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -35,8 +35,8 @@ Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制 | 0 | 1 | 2 ---|-----------|-----------|---------- - 0 | MSSCALE_X | MSKEW_X | MTRANS_X - 1 | MSKEW_Y | MSSCALE_Y | MTRANS_Y + 0 | MSCALE_X | MSKEW_X | MTRANS_X + 1 | MSKEW_Y | MSCALE_Y | MTRANS_Y 2 | MPERSP_0 | MPERSP_1 | MPERSP_2 From ba52ec6c5ffd912d12f3b6d5f84cb6af998e2161 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 01:45:13 +0800 Subject: [PATCH 056/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 80f43a8e..bb8287b6 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -39,6 +39,11 @@ Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制 1 | MSKEW_Y | MSCALE_Y | MTRANS_Y 2 | MPERSP_0 | MPERSP_1 | MPERSP_2 +**数值作用的介绍:** + + + + From 3129661f53d5d572ea929196d8a56f69fa7d1d21 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 01:52:12 +0800 Subject: [PATCH 057/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index bb8287b6..4c85f310 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -41,6 +41,18 @@ Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制 **数值作用的介绍:** +序号 | 名称 | 摘要 +-----|----------|------------------------ + 0 | MSCALE_X | + 1 | MSKEW_X | + 2 | MTRANS_X | + 3 | MSKEW_Y | + 4 | MSCALE_Y | + 5 | MTRANS_Y | + 6 | MPERSP_0 | + 7 | MPERSP_1 | + 8 | MPERSP_2 | + From 18f3d455445a771f5001998ab68be79515adb947 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 02:09:15 +0800 Subject: [PATCH 058/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 4c85f310..10ea1155 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -41,17 +41,20 @@ Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制 **数值作用的介绍:** +> +根据名称我们就能猜到其大概作用,但有一些数值比较奇怪,需要细心考证。 + 序号 | 名称 | 摘要 -----|----------|------------------------ - 0 | MSCALE_X | - 1 | MSKEW_X | - 2 | MTRANS_X | - 3 | MSKEW_Y | - 4 | MSCALE_Y | - 5 | MTRANS_Y | - 6 | MPERSP_0 | - 7 | MPERSP_1 | - 8 | MPERSP_2 | + 0 | MSCALE_X | 控制X坐标 缩放,旋转 + 1 | MSKEW_X | 控制X坐标 错切,旋转 + 2 | MTRANS_X | 控制X坐标 位移 + 3 | MSKEW_Y | 控制Y坐标 错切,旋转 + 4 | MSCALE_Y | 控制Y坐标 缩放,旋转 + 5 | MTRANS_Y | 控制Y坐标 位移 + 6 | MPERSP_0 | 控制透视 (绕Y轴旋转) + 7 | MPERSP_1 | 控制透视 (绕X轴旋转) + 8 | MPERSP_2 | 控制透视 (通常为1) From bdd93635f294d7b75d0fcd9178c45321fb1c9bdb Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 02:46:31 +0800 Subject: [PATCH 059/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 10ea1155..8c3de57f 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -44,17 +44,17 @@ Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制 > 根据名称我们就能猜到其大概作用,但有一些数值比较奇怪,需要细心考证。 -序号 | 名称 | 摘要 ------|----------|------------------------ - 0 | MSCALE_X | 控制X坐标 缩放,旋转 - 1 | MSKEW_X | 控制X坐标 错切,旋转 - 2 | MTRANS_X | 控制X坐标 位移 - 3 | MSKEW_Y | 控制Y坐标 错切,旋转 - 4 | MSCALE_Y | 控制Y坐标 缩放,旋转 - 5 | MTRANS_Y | 控制Y坐标 位移 - 6 | MPERSP_0 | 控制透视 (绕Y轴旋转) - 7 | MPERSP_1 | 控制透视 (绕X轴旋转) - 8 | MPERSP_2 | 控制透视 (通常为1) +序号 | 名称 | 对应单词 | 摘要 +-----|----------|-------------|-------------- + 0 | MSCALE_X | scale | 控制X坐标 缩放,旋转 + 1 | MSKEW_X | skew | 控制X坐标 错切,旋转 + 2 | MTRANS_X | transfer | 控制X坐标 位移 + 3 | MSKEW_Y | skew | 控制Y坐标 错切,旋转 + 4 | MSCALE_Y | scale | 控制Y坐标 缩放,旋转 + 5 | MTRANS_Y | transfer | 控制Y坐标 位移 + 6 | MPERSP_0 | perspective | 控制透视 (绕Y轴旋转) + 7 | MPERSP_1 | perspective | 控制透视 (绕X轴旋转) + 8 | MPERSP_2 | perspective | 控制透视 (通常为1) From 0de38eecbc7f91b0c9e77ed7178e740ceb0973ba Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 03:23:57 +0800 Subject: [PATCH 060/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 8c3de57f..0dcdaffb 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -6,7 +6,7 @@ 如题,本篇的主角是 Matrix(并不是黑客帝国)。 -它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D绘图中十分重要的角色 -- Matrix。 +它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(Android中有三个Matrix,分别属于OpenGL,graphics 和 vr, 本篇主要讲述的是graphics中的Matrix)。 > #### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 From 3880e31e40c8bb56dc1cfe0f063cdeee2c999c99 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 03:43:21 +0800 Subject: [PATCH 061/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 0dcdaffb..2419119a 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -6,7 +6,7 @@ 如题,本篇的主角是 Matrix(并不是黑客帝国)。 -它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(Android中有三个Matrix,分别属于OpenGL,graphics 和 vr, 本篇主要讲述的是graphics中的Matrix)。 +它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(Android中有两个Matrix,分别属于OpenGL 和 graphics, 本篇主要讲述的是graphics中的Matrix)。 > #### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 From f89d547992604343315bbb2a06309840cb15a615 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 04:04:36 +0800 Subject: [PATCH 062/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 2419119a..2f864155 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -29,7 +29,7 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... -## Matrix原理 +## Matrix基本原理 Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图的不同属性,大致如下: @@ -55,7 +55,13 @@ Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制 6 | MPERSP_0 | perspective | 控制透视 (绕Y轴旋转) 7 | MPERSP_1 | perspective | 控制透视 (绕X轴旋转) 8 | MPERSP_2 | perspective | 控制透视 (通常为1) - + +从上表中可以看出一些内容,下面分析一下画布常用的四种操作(translate, scale, rotate, skew)都是由哪些参数控制的。 + + + +## Matrix方法详解 + From a33549970f67241cc33c6550a0f3b591e46d3c63 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 06:10:39 +0800 Subject: [PATCH 063/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 2f864155..edfabfa4 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,5 +1,6 @@ # Matrix基础 + 前面讲了四篇 Path 相关的内容,本次终于要到了大家期盼已久的黑客帝国!  @@ -33,11 +34,18 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图的不同属性,大致如下: - | 0 | 1 | 2 ----|-----------|-----------|---------- - 0 | MSCALE_X | MSKEW_X | MTRANS_X - 1 | MSKEW_Y | MSCALE_Y | MTRANS_Y - 2 | MPERSP_0 | MPERSP_1 | MPERSP_2 + **数值作用的介绍:** From ba8c768bda9b107653875a9699d08938b220f7dd Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 06:14:11 +0800 Subject: [PATCH 064/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index edfabfa4..3f1f7ee2 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -34,7 +34,7 @@ Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些 Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图的不同属性,大致如下: - diff --git a/README.md b/README.md index 2bbcb2b3..17ef6ddf 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,8 @@ 02 | [Path常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Path.md) 03 | [贝塞尔曲线常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Bezier.md) +****** + ## [混沌水晶](https://github.com/GcsSloop/AndroidNote/tree/master/ChaosCrystal) 混沌水晶本身并没有太大功效,但与其他物品合成之后可能产生质的变化。 From 28c0ff5d76116dde43e46fdec000e958481a2634 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 16:48:25 +0800 Subject: [PATCH 066/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 3f1f7ee2..774bf144 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -66,6 +66,8 @@ $$) 从上表中可以看出一些内容,下面分析一下画布常用的四种操作(translate, scale, rotate, skew)都是由哪些参数控制的。 + + ## Matrix方法详解 From 549615a448e26930c2c549f3cb2c82e74c811b99 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 16:52:48 +0800 Subject: [PATCH 067/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 774bf144..9a400c0d 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -69,6 +69,8 @@ $$)   +> +**从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述。** ## Matrix方法详解 From b4dd04fd19e04f7456d7b2b8f28be7e69e3f26c5 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 16:55:36 +0800 Subject: [PATCH 068/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 9a400c0d..984861f7 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -64,7 +64,7 @@ $$) 7 | MPERSP_1 | perspective | 控制透视 (绕X轴旋转) 8 | MPERSP_2 | perspective | 控制透视 (通常为1) -从上表中可以看出一些内容,下面分析一下画布常用的四种操作(translate, scale, rotate, skew)都是由哪些参数控制的。 +从上表中可以看出一些内容,下面我们看一下2D画布中常用的四种操作(translate, scale, rotate, skew)都是由哪些参数控制的。   From 9f6199b59e2a17d40d73223f6617eecb6e18431a Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 20 Jul 2016 17:05:00 +0800 Subject: [PATCH 069/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 984861f7..8383579f 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -5,15 +5,18 @@  +## Matrix作用 + 如题,本篇的主角是 Matrix(并不是黑客帝国)。 它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(Android中有两个Matrix,分别属于OpenGL 和 graphics, 本篇主要讲述的是graphics中的Matrix)。 > -#### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 +### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 也就是说, 我们进行界面视图等转换都是需要依靠 Matrix 的帮助的,例如我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的画布操作,这些操作的核心就是改变 Matrix 的数值。 + ## Matrix方法表 Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 @@ -72,7 +75,7 @@ $$) > **从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述。** -## Matrix方法详解 + From 0bf4fdbdf99b17081eab12fa1a21fffc4ad36f30 Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 21 Jul 2016 03:09:37 +0800 Subject: [PATCH 070/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 36 +++++++++++++-------------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 8383579f..7f6cb48e 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -7,7 +7,7 @@ ## Matrix作用 -如题,本篇的主角是 Matrix(并不是黑客帝国)。 +如题,本篇的主角是 Matrix。 它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(Android中有两个Matrix,分别属于OpenGL 和 graphics, 本篇主要讲述的是graphics中的Matrix)。 @@ -17,22 +17,6 @@ 也就是说, 我们进行界面视图等转换都是需要依靠 Matrix 的帮助的,例如我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的画布操作,这些操作的核心就是改变 Matrix 的数值。 -## Matrix方法表 - -Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 - -方法类别 | 相关API | 摘要 ------------|---------------------------------------------------------|------------------------ -基本方法 | equals hashCode toString toShortString | 比较、 获取哈希值、 转换为字符串 -数值操作 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 -设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 -前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 -后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 -数值计算 | mapPoints mapRadius mapRect mapVectors | 计算变换后的数值 -特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 -矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... - - ## Matrix基本原理 Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图的不同属性,大致如下: @@ -73,13 +57,29 @@ $$)  > -**从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述。** +**从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述,会在之后对文章中详述其作用。** +## Matrix方法表 + +Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 + +方法类别 | 相关API | 摘要 +-----------|---------------------------------------------------------|------------------------ +基本方法 | equals hashCode toString toShortString | 比较、 获取哈希值、 转换为字符串 +数值操作 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 +设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 +前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 +后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 +数值计算 | mapPoints mapRadius mapRect mapVectors | 计算变换后的数值 +特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 +矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... + + From eb0d57779a6784adb20fccb4d1bc24972012ef0b Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 21 Jul 2016 04:09:29 +0800 Subject: [PATCH 071/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 7f6cb48e..4557be0a 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -9,13 +9,14 @@ 如题,本篇的主角是 Matrix。 -它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(Android中有两个Matrix,分别属于OpenGL 和 graphics, 本篇主要讲述的是graphics中的Matrix)。 +它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(Android中有两个Matrix,分别属于OpenGL 和 graphics, 本篇主要讲述的是graphics中的Matrix), + +另外,本篇的重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 > ### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 -也就是说, 我们进行界面视图等转换都是需要依靠 Matrix 的帮助的,例如我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的画布操作,这些操作的核心就是改变 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基本原理 @@ -34,10 +35,11 @@ MPERSP\\_0 & MPERSP\\_1 & MPERSP\\_2 \\right ] $$) + **数值作用的介绍:** > -根据名称我们就能猜到其大概作用,但有一些数值比较奇怪,需要细心考证。 +根据名称我们就能猜到其大概作用,但有些效果是需要多个参数组合控制的,如下。 序号 | 名称 | 对应单词 | 摘要 -----|----------|-------------|-------------- @@ -59,6 +61,20 @@ $$) > **从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述,会在之后对文章中详述其作用。** +## Matrix常见误解 + +在写本文之前,我翻阅很多介绍 Matrix 的文章和官方文档,但其中文的搜索结果令我很悲伤,大部分的中文章对Matrix都存在误解,想当然的创造出一些错误的理论, 导致很多(抄袭)的文章都是这一错误的理论,不知道要坑害多少小白,常见的错误理论有: + +* 1.认为Matrix最下面的一行的三个参数(MPERSP_0、MPERSP_1、MPERSP_2)没有什么太大的作用,在这里只是为了凑数。 + +> 实际上最后一行参数在3D变换中有着至关重要的作用,这一点会在后面中Camera一文中详细介绍。 + +* 2.最后一个参数MPERSP_2被解释为scale + +> 的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。 + + + @@ -66,7 +82,7 @@ $$) ## Matrix方法表 -Matrix 有很多常用和不常用的方法,在本篇中重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 +Matrix 有很多常用和不常用的方法, 方法类别 | 相关API | 摘要 -----------|---------------------------------------------------------|------------------------ From 00151af1ad9afc5a3be26792bbca8afe6d59bf6c Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 21 Jul 2016 04:10:59 +0800 Subject: [PATCH 072/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 4557be0a..6ad70f92 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -5,11 +5,11 @@  -## Matrix作用 +## 一、Matrix作用 如题,本篇的主角是 Matrix。 -它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(Android中有两个Matrix,分别属于OpenGL 和 graphics, 本篇主要讲述的是graphics中的Matrix), +它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(_Android中有两个Matrix,分别属于OpenGL 和 graphics, 本篇主要讲述的是graphics中的Matrix_), 另外,本篇的重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 @@ -18,7 +18,7 @@ 也就是说, 我们进行界面视图等转换都是需要依靠 Matrix 的帮助的,例如我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的画布操作,这些操作的核心就是改变 Matrix 的数值,我们常见的可以用到Matrix的地方就是 canvas、 path、 bitmap 和 camera 等地方,对于我们Android程序员来说,只要是图形化界面展示,就有Matrix在后台默默工作。 -## Matrix基本原理 +## 二、Matrix基本原理 Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图的不同属性,大致如下: @@ -61,7 +61,7 @@ $$) > **从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述,会在之后对文章中详述其作用。** -## Matrix常见误解 +## 三、Matrix常见误解 在写本文之前,我翻阅很多介绍 Matrix 的文章和官方文档,但其中文的搜索结果令我很悲伤,大部分的中文章对Matrix都存在误解,想当然的创造出一些错误的理论, 导致很多(抄袭)的文章都是这一错误的理论,不知道要坑害多少小白,常见的错误理论有: From 949ea23e1a07d38d123fdd4a08ee9a7088fb1e9f Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 21 Jul 2016 04:14:15 +0800 Subject: [PATCH 073/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 6ad70f92..85a35ab9 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -65,13 +65,13 @@ $$) 在写本文之前,我翻阅很多介绍 Matrix 的文章和官方文档,但其中文的搜索结果令我很悲伤,大部分的中文章对Matrix都存在误解,想当然的创造出一些错误的理论, 导致很多(抄袭)的文章都是这一错误的理论,不知道要坑害多少小白,常见的错误理论有: -* 1.认为Matrix最下面的一行的三个参数(MPERSP_0、MPERSP_1、MPERSP_2)没有什么太大的作用,在这里只是为了凑数。 +**1.认为Matrix最下面的一行的三个参数(MPERSP_0、MPERSP_1、MPERSP_2)没有什么太大的作用,在这里只是为了凑数。** -> 实际上最后一行参数在3D变换中有着至关重要的作用,这一点会在后面中Camera一文中详细介绍。 +> **实际上最后一行参数在3D变换中有着至关重要的作用,这一点会在后面中Camera一文中详细介绍。** -* 2.最后一个参数MPERSP_2被解释为scale +### **2.最后一个参数MPERSP_2被解释为scale** -> 的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。 +> **的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。** From 20b66a4bce81f7013ad0d11da780e5edaa3da305 Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 21 Jul 2016 15:04:25 +0800 Subject: [PATCH 074/522] Update --- CustomView/Base/[2]AngleAndRadian.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CustomView/Base/[2]AngleAndRadian.md b/CustomView/Base/[2]AngleAndRadian.md index 295b006c..bb974dae 100644 --- a/CustomView/Base/[2]AngleAndRadian.md +++ b/CustomView/Base/[2]AngleAndRadian.md @@ -51,10 +51,10 @@ C = 2πr; 可得: -**弧度 = 角度xπ/180** - -**角度 = 弧度x180/π** - +公式 | 例子 +----------------------|--------------------- +**弧度 = 角度xπ/180** | 2π = 360 x π / 180 +**角度 = 弧度x180/π** | 360 = 2π x 180 / π ## 四.一些细节问题 由于默认屏幕坐标系和常见数学坐标系的小差别([坐标系问题点这里](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B1%5DCoordinateSystem.md)),所以在角上必然也会存在一些区别,例如: From f0a95cadf3ad9928dca064ae8a57b50f0a911d5a Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 21 Jul 2016 15:05:44 +0800 Subject: [PATCH 075/522] Update --- CustomView/Base/[2]AngleAndRadian.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CustomView/Base/[2]AngleAndRadian.md b/CustomView/Base/[2]AngleAndRadian.md index bb974dae..086c8181 100644 --- a/CustomView/Base/[2]AngleAndRadian.md +++ b/CustomView/Base/[2]AngleAndRadian.md @@ -56,6 +56,13 @@ C = 2πr; **弧度 = 角度xπ/180** | 2π = 360 x π / 180 **角度 = 弧度x180/π** | 360 = 2π x 180 / π +维基百科的公式: + +> rad 是弧度, deg 是角度 + + + + ## 四.一些细节问题 由于默认屏幕坐标系和常见数学坐标系的小差别([坐标系问题点这里](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B1%5DCoordinateSystem.md)),所以在角上必然也会存在一些区别,例如: From 7740bbf2964babc6e56baf7a215f7240a01ac6b6 Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 21 Jul 2016 17:15:35 +0800 Subject: [PATCH 076/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 85a35ab9..cd48e2bc 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -69,7 +69,7 @@ $$) > **实际上最后一行参数在3D变换中有着至关重要的作用,这一点会在后面中Camera一文中详细介绍。** -### **2.最后一个参数MPERSP_2被解释为scale** +**2.最后一个参数MPERSP_2被解释为scale** > **的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。** From 24c59d3a30868455a5ea4e923c34051117b2921d Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 22 Jul 2016 01:35:19 +0800 Subject: [PATCH 077/522] Update --- GankDevelopmentNote/chapter_1.md | 65 -------------------------------- 1 file changed, 65 deletions(-) delete mode 100644 GankDevelopmentNote/chapter_1.md diff --git a/GankDevelopmentNote/chapter_1.md b/GankDevelopmentNote/chapter_1.md deleted file mode 100644 index f68e6726..00000000 --- a/GankDevelopmentNote/chapter_1.md +++ /dev/null @@ -1,65 +0,0 @@ -# Gank开发日志 - 整体规划 - -## 前言 - - 一直想找一个免费好用的网络接口做一个完完整整的客户端,然而一直没有找到合适的,直到某天看到代码家干货集中营的开放API,感觉很符合本人口味,于是决定做一个Gank的客户端。 - - 然而定睛一看,Gank已经有这么多客户端了,而且大部分都做的还不错,让我也是压力山大啊,个人觉得,既然要做,就肯定要做一个和别人不一样的,有特色的,这才有意思嘛,然而带收藏的,纯妹子的,日报型的都有了,思来想去,也没有找到和别人不同的突破点,于是就暂时搁置了,突然某天灵光乍现,作品要体现自己的特色,**自己的特色不就是懒么?所以就做一个最偷工减料的客户端吧**。 - -### 先预览完成效果,大家猜一下最终用了多少行代码:bangbang: - - -
- -**嘻嘻,这个大家先慢慢猜,稍后再告诉大家结果,下面开始本篇正文,对项目进行整体规划。** - -## 一.需求分析 - - 在做项目之前,肯定要首先分析一下都需要哪些功能,以免花费大量精力结果实现了一些并没有什么卵用的功能。 - -### 基本功能 - -序号 | 功能 -:---:|-------------- - 1 | 展示最新的干货信息 - 2 | **看妹子,看妹子,看妹子!** - 3 | **保存妹子图片,保存妹子图片,保存妹子图片!** - 4 | 查看文章详情 - 5 | 可以方便的分享收藏文章 - - -### 可以砍掉功能 - -
- -我们百万大哥曾说过,**要么砍需求,要么砍需求方**,由于本次需求是我自己提出来了,砍自己容易被当成精神病,所以我决定砍需求。 - -> **接下来请欣赏我如何为自己的偷懒找理由。** - -序号 | 需求 | 理由 -:---:|-----------------------|---------------- - 1 | 展示最新干货信息 | (必备功能,保留) - 2 | ~~看妹子~~ | (看妹子还要新建显示图片的界面,太麻烦,砍了) 喂喂喂,话说这才是核心功能吧:joy:怎能说砍就砍。(那就交给浏览器干吧) - 3 | ~~保存妹子~~ | (既然看妹子都交给浏览器干了,那保存妹子自然也是浏览器的活) - 4 | ~~查看文章详情~~ |(什么?你说要做一个内置的浏览器(WebView)用来看文章?,话说一旦做了内置浏览器,就需要提供分享功能,提供查看保存妹子功能等等......这么繁重的活怎么能自己干,果断抛出去,拜拜啦,万恶的内置浏览器。) - 5 | ~~方便的分享保存文章~~ | (话说这活不是已经交给其他浏览器干了么?) - -**砍需求成功,最终只剩一个需求了,哇哈哈哈哈哈哈~~~~~~~~** - -话说这样砍需求会不会影响体验效果?接下来分析一下使用外置浏览器的好处。 - -序号 | 优点 -:---:|--------- - 1 | 手机默认都有浏览器,所以满足基本需求应该不成问题。 - 2 | 防止内置浏览器(WebView)因兼容性问题导致阅读效果不佳。 - 3 | 如果使用Chrome浏览器,360浏览器等并登陆账号,可以方便将手机收藏同步到电脑,毕竟大部分技术文章在手机端查看效果并不是很好。个人推荐使用Chrome,用Google账号登陆,在文末会提供科学上网软件。 - 4 | 作为本应用和核心功能,看妹子,保存妹子,浏览器都可以很好的完成,甚至你可以在浏览器中搜索图片出处,高清大图以及类似图片(首先,你要有一个Chrome和科学上网软件) 效果见下:point_down: - - - - - - - - - From 2da14ef96e86f071c0daf9b1c93f6d9603d00150 Mon Sep 17 00:00:00 2001 From: sloop
Date: Fri, 22 Jul 2016 02:47:02 +0800 Subject: [PATCH 078/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index cd48e2bc..36c5877e 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -63,7 +63,7 @@ $$) ## 三、Matrix常见误解 -在写本文之前,我翻阅很多介绍 Matrix 的文章和官方文档,但其中文的搜索结果令我很悲伤,大部分的中文章对Matrix都存在误解,想当然的创造出一些错误的理论, 导致很多(抄袭)的文章都是这一错误的理论,不知道要坑害多少小白,常见的错误理论有: +在写本文之前,我翻阅很多介绍 Matrix 的文章和官方文档,但其中文的搜索结果令我很悲伤,大部分的中文文章对Matrix都存在误解,想当然的创造出一些错误的理论, 导致很多(抄袭)的文章都是这一错误的理论,不知道要坑害多少小白,常见的错误理论有: **1.认为Matrix最下面的一行的三个参数(MPERSP_0、MPERSP_1、MPERSP_2)没有什么太大的作用,在这里只是为了凑数。** @@ -74,6 +74,17 @@ $$) > **的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。** +## 四、Matrix原理详解 + +Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,不过我会尽量用通俗易懂的方式来帮助大家理解它。 + +**Matrix 作为一个模型,实际上的作用就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子:** + + + + + + From 8e39014116087780f79e73e7422c3af412e34154 Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 22 Jul 2016 03:42:32 +0800 Subject: [PATCH 079/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 36c5877e..61d1eee0 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -80,6 +80,13 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, **Matrix 作为一个模型,实际上的作用就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子:** +我的的手机屏幕作为物理设备,其坐标系肯定是从左上角开始的,而且是不会改变的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系,通常情况下,我们的内容区和屏幕坐标系还相差一个通知栏和一个标题栏,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制。 + +假设通知栏高度为20像素,导航栏高度为40像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点,Matrix在此处的作用就是转换这些数值。 + +我们知道,Android中点视图是可以嵌套的树形结构,每一个子View都有自己的坐标系,但实际绘制时都应当转换为实际的屏幕坐标系才能正确的绘制,所以让每一个子View都有一个Matrix,这样每一个View就都拥有了转换坐标的能力,可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。 + + From 2c0f232460146ddc259e8dcfebc69507368a23e9 Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 22 Jul 2016 03:54:40 +0800 Subject: [PATCH 080/522] 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 61d1eee0..d22e1a11 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就都拥有了转换坐标的能力,可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。 + + + ## 二、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就都拥有了转换坐标的能力,可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。 - From 705564455852a26d9f9c7348e82d66056bbcaf23 Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 22 Jul 2016 04:01:04 +0800 Subject: [PATCH 081/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 29 ++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index d22e1a11..cc8fed6c 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -7,22 +7,37 @@ ## 一、Matrix作用 -如题,本篇的主角是 Matrix。 +如题,本篇的主角是 Matrix,看起来大概是下面这样: + + 它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(_Android中有两个Matrix,分别属于OpenGL 和 graphics, 本篇主要讲述的是graphics中的Matrix_), -另外,本篇的重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 +本篇的重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 > ### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 **Matrix 作为一个模型,主要功能就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子:** -我的的手机屏幕作为物理设备,其坐标系肯定是从左上角开始的,而且是不会改变的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系,通常情况下,我们的内容区和屏幕坐标系还相差一个通知栏和一个标题栏,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制。 +我的的手机屏幕作为物理设备,其坐标系肯定是从左上角开始的,而且是不会改变的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系,通常情况下,我们的内容区和屏幕坐标系还相差一个通知栏加一个标题栏的距离,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制,Matrix在此处的作用就是转换这些数值。 -假设通知栏高度为20像素,导航栏高度为40像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点,Matrix在此处的作用就是转换这些数值。 +> +假设通知栏高度为20像素,导航栏高度为40像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点。 -我们知道,Android中点视图是可以嵌套的树形结构,每一个子View都有自己的坐标系,但实际绘制时都应当转换为实际的屏幕坐标系才能正确的绘制,所以让每一个子View都有一个Matrix,这样每一个View就都拥有了转换坐标的能力,可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。 +> +我们也知道,Android中点视图是可以嵌套的树形结构,每一个子View都有自己的坐标系,但实际绘制时都应当转换为实际的屏幕坐标系才能正确的绘制,所以让每一个子View都有一个Matrix,这样每一个View就都拥有了转换坐标的能力,可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。  @@ -70,7 +85,7 @@ $$) > **从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述,会在之后对文章中详述其作用。** -## 三、Matrix常见误解 +### 常见误解 在写本文之前,我翻阅很多介绍 Matrix 的文章和官方文档,但其中文的搜索结果令我很悲伤,大部分的中文文章对Matrix都存在误解,想当然的创造出一些错误的理论, 导致很多(抄袭)的文章都是这一错误的理论,不知道要坑害多少小白,常见的错误理论有: @@ -83,7 +98,7 @@ $$) > **的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。** -## 四、Matrix原理详解 +## 三、Matrix原理详解 Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,不过我会尽量用通俗易懂的方式来帮助大家理解它。 From 0291f358d27f6d05ffddf210c14926870a489d30 Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 22 Jul 2016 04:01:30 +0800 Subject: [PATCH 082/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index cc8fed6c..a80802f6 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -26,7 +26,6 @@ $$) 本篇的重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 -> ### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 **Matrix 作为一个模型,主要功能就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子:** From 8c76929f7deafeb34d2f33596a4dc5bafc47eccb Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 22 Jul 2016 07:26:20 +0800 Subject: [PATCH 083/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index a80802f6..ad730082 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -97,7 +97,14 @@ $$) > **的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。** -## 三、Matrix原理详解 +## 三、Matrix优缺点 + +Matrix在view、canvas、path、bitmap等很多地方都有应用,可以说运用十分广泛,优点突出,但也存在一定但缺点,下面简要介绍一下Matrix相关优缺点。 + +### 优点 + + + Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,不过我会尽量用通俗易懂的方式来帮助大家理解它。 From 91d7fd579db287bf6b81934c8fff9fca8e473cdc Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 22 Jul 2016 14:47:51 +0800 Subject: [PATCH 084/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index ad730082..d9998475 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -103,6 +103,10 @@ Matrix在view、canvas、path、bitmap等很多地方都有应用,可以说运 ### 优点 +* 计算方便,利用矩阵的计算法则 +* 方便复用,Matrix仅有九个数值,却包含了大部分画布的状态信息,如果有重复的需要相同状态的地方,只需要构造好一个Matrix,然后设置给不同的画布即可,无需给每一个画布都重新构造状态,同样,如果一张图片需要在不同的地方以状态(镜像,旋转)展示,可以只放一张资源图片,然后构造出不同的Matrix进行设置即可。 +* + From dfc8926134a4f0f0a9a5779e941a12cd40ba5c53 Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 22 Jul 2016 21:28:29 +0800 Subject: [PATCH 085/522] Update --- README.md | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 17ef6ddf..f42bec5a 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ -# AndroidNote -### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) + -我的安卓学习笔记,记录学习过程中遇到的问题,以及我发布的安卓相关文章。 +### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -如果出现链接失效等情况可以提交Issues提醒我修改相关内容。 +我的安卓学习笔记,记录学习过程中遇到的问题,以及我的一些经验总结。如果出现链接失效等情况可以提交Issues提醒我修改相关内容。 > #### PS:点击分类标题可以查看该分类的详细信息。 From 6513bf57197f001a1c19a370a86f7bb5513a7de0 Mon Sep 17 00:00:00 2001 From: sloop
Date: Fri, 22 Jul 2016 23:21:08 +0800 Subject: [PATCH 086/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index d9998475..e79df6e6 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -79,7 +79,7 @@ $$) 从上表中可以看出一些内容,下面我们看一下2D画布中常用的四种操作(translate, scale, rotate, skew)都是由哪些参数控制的。  - + > **从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述,会在之后对文章中详述其作用。** From 443bd862e3fdc9dfc871672f968f11c503c85ccc Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 00:58:04 +0800 Subject: [PATCH 087/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index e79df6e6..3ca77faf 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -103,9 +103,15 @@ Matrix在view、canvas、path、bitmap等很多地方都有应用,可以说运 ### 优点 -* 计算方便,利用矩阵的计算法则 -* 方便复用,Matrix仅有九个数值,却包含了大部分画布的状态信息,如果有重复的需要相同状态的地方,只需要构造好一个Matrix,然后设置给不同的画布即可,无需给每一个画布都重新构造状态,同样,如果一张图片需要在不同的地方以状态(镜像,旋转)展示,可以只放一张资源图片,然后构造出不同的Matrix进行设置即可。 -* +* 计算方便,利用矩阵的计算法则可以方便的将一个坐标系转换为另一个坐标系中。 +* 存储量小,Matrix仅有九个数值,却包含了大部分画布的状态信息。 +* 方便复用,如果有重复的需要相同状态的地方,只需要构造好一个Matrix,设置给不同的画布即可保证每一个画布的状态都是相同的,无需给每一个画布都重新构造状态。另外,如果一张图片需要以不同的状态展示,可以只放一张资源图片,然后构造出不同的Matrix进行设置即可。 + +### 缺点 + +* 稍有门槛,Matrix计算运用了线性代数的知识,有一定的门槛,虽然封装了比较好的方法,但对于大部分人来说,pre、post、set有啥区别还是傻傻分不清楚,更不用说仿射,投影,齐次坐标这些让人头大的概念。 +* 容易混淆,Matrix的方法变换 和 Canvas的方法变换 稍微有所差别, 如果按照Canvas的变换方法直接构造Matrix,最后的结果可能会与你想象的有所差别。 + @@ -136,11 +142,11 @@ Matrix 有很多常用和不常用的方法, 方法类别 | 相关API | 摘要 -----------|---------------------------------------------------------|------------------------ 基本方法 | equals hashCode toString toShortString | 比较、 获取哈希值、 转换为字符串 -数值操作 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 +数值操作 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 +数值计算 | mapPoints mapRadius mapRect mapVectors | 计算变换后的数值 设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 -数值计算 | mapPoints mapRadius mapRect mapVectors | 计算变换后的数值 特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... From 2728b4da974c9f9b0d6c11a66356fecda578304a Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 01:01:59 +0800 Subject: [PATCH 088/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 3ca77faf..a6d6481a 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -22,21 +22,17 @@ MPERSP\\_0 & MPERSP\\_1 & MPERSP\\_2 \\right ] $$) -它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(_Android中有两个Matrix,分别属于OpenGL 和 graphics, 本篇主要讲述的是graphics中的Matrix_), - -本篇的重点不在于这些方法的讲解,而是帮助大家理解 Matrix 的一些基本概念。 +它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(_本篇讲述的是graphics中的Matrix_), ### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 -**Matrix 作为一个模型,主要功能就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子:** +Matrix 作为一个模型,主要功能就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子: 我的的手机屏幕作为物理设备,其坐标系肯定是从左上角开始的,而且是不会改变的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系,通常情况下,我们的内容区和屏幕坐标系还相差一个通知栏加一个标题栏的距离,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制,Matrix在此处的作用就是转换这些数值。 > 假设通知栏高度为20像素,导航栏高度为40像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点。 -> -我们也知道,Android中点视图是可以嵌套的树形结构,每一个子View都有自己的坐标系,但实际绘制时都应当转换为实际的屏幕坐标系才能正确的绘制,所以让每一个子View都有一个Matrix,这样每一个View就都拥有了转换坐标的能力,可以非常方便的将各自的坐标系中的内容映射到屏幕坐标系中。  @@ -59,11 +55,6 @@ MPERSP\\_0 & MPERSP\\_1 & MPERSP\\_2 $$) -**数值作用的介绍:** - -> -根据名称我们就能猜到其大概作用,但有些效果是需要多个参数组合控制的,如下。 - 序号 | 名称 | 对应单词 | 摘要 -----|----------|-------------|-------------- 0 | MSCALE_X | scale | 控制X坐标 缩放,旋转 From 5a87381bfc84fc00dcd59184638cf1c3ec65eb86 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 01:05:12 +0800 Subject: [PATCH 089/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index a6d6481a..88385e21 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -24,11 +24,11 @@ $$) 它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(_本篇讲述的是graphics中的Matrix_), -### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型。 +### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型,主要功能是坐标映射,数值转换。 -Matrix 作为一个模型,主要功能就是数值转换,将一个坐标系中的点映射到另一个坐标系中,举个栗子: +我的的手机屏幕作为物理设备,其坐标系是从左上角开始的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系。 -我的的手机屏幕作为物理设备,其坐标系肯定是从左上角开始的,而且是不会改变的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系,通常情况下,我们的内容区和屏幕坐标系还相差一个通知栏加一个标题栏的距离,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制,Matrix在此处的作用就是转换这些数值。 +以下图为例,我们的内容区和屏幕坐标系还相差一个通知栏加一个标题栏的距离,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制,Matrix在此处的作用就是转换这些数值。 > 假设通知栏高度为20像素,导航栏高度为40像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点。 From 3ee920843e4198f87d25ff08c348840750d0639a Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 01:11:09 +0800 Subject: [PATCH 090/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 22 +++------------------- 1 file changed, 3 insertions(+), 19 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 88385e21..7d90ffe5 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -88,28 +88,12 @@ $$) > **的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。** -## 三、Matrix优缺点 +## 三、Matrix详解 -Matrix在view、canvas、path、bitmap等很多地方都有应用,可以说运用十分广泛,优点突出,但也存在一定但缺点,下面简要介绍一下Matrix相关优缺点。 +Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,我会尽量用通俗易懂的方式来帮助大家理解它。 -### 优点 -* 计算方便,利用矩阵的计算法则可以方便的将一个坐标系转换为另一个坐标系中。 -* 存储量小,Matrix仅有九个数值,却包含了大部分画布的状态信息。 -* 方便复用,如果有重复的需要相同状态的地方,只需要构造好一个Matrix,设置给不同的画布即可保证每一个画布的状态都是相同的,无需给每一个画布都重新构造状态。另外,如果一张图片需要以不同的状态展示,可以只放一张资源图片,然后构造出不同的Matrix进行设置即可。 - -### 缺点 - -* 稍有门槛,Matrix计算运用了线性代数的知识,有一定的门槛,虽然封装了比较好的方法,但对于大部分人来说,pre、post、set有啥区别还是傻傻分不清楚,更不用说仿射,投影,齐次坐标这些让人头大的概念。 -* 容易混淆,Matrix的方法变换 和 Canvas的方法变换 稍微有所差别, 如果按照Canvas的变换方法直接构造Matrix,最后的结果可能会与你想象的有所差别。 - - - - - -Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,不过我会尽量用通俗易懂的方式来帮助大家理解它。 - -## 四大常用操作 +### 四大常用操作 我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的四种画布操作(translate, scale, rotate, skew),这些操作的核心就是改变Matrix的数值,接下来我们看看这四种操作都会影响到哪些数值。 From b7df5963a8aa7792bf6da47d5ea25f23091f0e22 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 01:15:22 +0800 Subject: [PATCH 091/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 7d90ffe5..62625bd3 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,13 +1,16 @@ # Matrix基础 -前面讲了四篇 Path 相关的内容,本次终于要到了大家期盼已久的黑客帝国! +前面讲了四篇 Path 相关的内容,本次终于要到了大家期盼已久的黑客帝国(Matrix)!  -## 一、Matrix作用 -如题,本篇的主角是 Matrix,看起来大概是下面这样: +****** + +## 一、Matrix简介 + +如题,本篇的主角是 Matrix,其实和黑客帝国并没有太大关系,它看起来大概是下面这样:  -它在我们在之前的很多文章中都提及过,但并没有仔细的介绍过,从本篇开始终于要正式介绍它了,这个在2D和3D绘图中十分重要的角色Matrix(_本篇讲述的是graphics中的Matrix_), - -### Matrix 的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,其作用则是一个模型,一个控制视图状态的模型,主要功能是坐标映射,数值转换。 +### Matrix概念: Matrix的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,也一个控制视图状态的模型,主要功能是坐标映射,数值转换。 我的的手机屏幕作为物理设备,其坐标系是从左上角开始的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系。 From 9a81e8381fd041bebd3052356865ba36e0d1354d Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 01:18:44 +0800 Subject: [PATCH 092/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 62625bd3..a832761c 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,4 +1,4 @@ -# Matrix基础 +# Matrix基础篇 前面讲了四篇 Path 相关的内容,本次终于要到了大家期盼已久的黑客帝国(Matrix)! From 10d43506ff0b1f1e5a9e39bd53d985aa429de9cf Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 01:31:39 +0800 Subject: [PATCH 093/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index a832761c..47296055 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,7 +1,9 @@ # Matrix基础篇 -前面讲了四篇 Path 相关的内容,本次终于要到了大家期盼已久的黑客帝国(Matrix)! +## 前言 + +前面讲了四篇 Path 相关的内容,经过长时间的拖更,终于要到了大家期盼已久的 Matrix, 一个与黑客帝国同名的东东,看名字就知道很不凡,接下来我们就看看这个 Matrix 到底是何方神圣。  From 4ff6481eec2fdd788b4171b1a8e7691d43420b1f Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 02:07:25 +0800 Subject: [PATCH 094/522] Update --- CustomView/Advance/[1]CustomViewProcess.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CustomView/Advance/[1]CustomViewProcess.md b/CustomView/Advance/[1]CustomViewProcess.md index dcbbc99b..f01a4f17 100644 --- a/CustomView/Advance/[1]CustomViewProcess.md +++ b/CustomView/Advance/[1]CustomViewProcess.md @@ -8,6 +8,9 @@ ## 前言 **本章节为什么要叫进阶篇?(虽然讲的是基础内容),因为从本篇开始,将会逐渐揭开自定义View的神秘面纱,每一篇都将比上一篇内容更加深入,利用所学的知识能够制作更加炫酷自定义View,就像在台阶上一样,每一篇都更上一层,~~帮助大家一步步走向人生巅峰,出任CEO,迎娶白富美。~~ 误,是帮助大家更加了解那些炫酷的自定义View是如何制作的,达到举一反三的效果。** +添加一个自定义View绘制流程函数调用链(简化版) + + ## 一.自定义View分类 From 3e4f755dd74ea00335bb8d29462b78e7a9a8d11f Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 02:22:21 +0800 Subject: [PATCH 095/522] Update --- CustomView/Advance/[1]CustomViewProcess.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[1]CustomViewProcess.md b/CustomView/Advance/[1]CustomViewProcess.md index f01a4f17..53c9a0a0 100644 --- a/CustomView/Advance/[1]CustomViewProcess.md +++ b/CustomView/Advance/[1]CustomViewProcess.md @@ -10,7 +10,8 @@ 添加一个自定义View绘制流程函数调用链(简化版) - + + ## 一.自定义View分类 From 1016a858c79fc4ac655339e7583b0c132bdec510 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 02:23:47 +0800 Subject: [PATCH 096/522] Update --- CustomView/Advance/[1]CustomViewProcess.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[1]CustomViewProcess.md b/CustomView/Advance/[1]CustomViewProcess.md index 53c9a0a0..4dbf43b7 100644 --- a/CustomView/Advance/[1]CustomViewProcess.md +++ b/CustomView/Advance/[1]CustomViewProcess.md @@ -8,7 +8,7 @@ ## 前言 **本章节为什么要叫进阶篇?(虽然讲的是基础内容),因为从本篇开始,将会逐渐揭开自定义View的神秘面纱,每一篇都将比上一篇内容更加深入,利用所学的知识能够制作更加炫酷自定义View,就像在台阶上一样,每一篇都更上一层,~~帮助大家一步步走向人生巅峰,出任CEO,迎娶白富美。~~ 误,是帮助大家更加了解那些炫酷的自定义View是如何制作的,达到举一反三的效果。** -添加一个自定义View绘制流程函数调用链(简化版) +自定义View绘制流程函数调用链(简化版)  From 007e8ebb8733c5c92ab942f4e96b472a76d49e50 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 02:27:48 +0800 Subject: [PATCH 097/522] Update --- CustomView/Advance/[1]CustomViewProcess.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[1]CustomViewProcess.md b/CustomView/Advance/[1]CustomViewProcess.md index 4dbf43b7..5d25f20b 100644 --- a/CustomView/Advance/[1]CustomViewProcess.md +++ b/CustomView/Advance/[1]CustomViewProcess.md @@ -10,7 +10,7 @@ 自定义View绘制流程函数调用链(简化版) - + ## 一.自定义View分类 From eb3c2ba69ebd54fe48376fbb58dcf8f2fe51c169 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 04:17:12 +0800 Subject: [PATCH 098/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 47296055..0102c308 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -68,7 +68,7 @@ $$) 5 | MTRANS_Y | transfer | 控制Y坐标 位移 6 | MPERSP_0 | perspective | 控制透视 (绕Y轴旋转) 7 | MPERSP_1 | perspective | 控制透视 (绕X轴旋转) - 8 | MPERSP_2 | perspective | 控制透视 (通常为1) + 8 | MPERSP_2 | perspective | 控制透视 (齐次坐标标志位,通常为1) 从上表中可以看出一些内容,下面我们看一下2D画布中常用的四种操作(translate, scale, rotate, skew)都是由哪些参数控制的。 From 65fe66faa4db4e10b28aa6e4a351231cd00dc712 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 18:59:18 +0800 Subject: [PATCH 099/522] Update --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index f42bec5a..d4df808c 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ > #### PS:点击分类标题可以查看该分类的详细信息。 -## [自定义View系列](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +## [自定义View系列](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 序号 | 内容 :----:|--------- @@ -25,7 +25,7 @@ ****** -## [教程类](https://github.com/GcsSloop/AndroidNote/tree/master/Course) +## [教程类](https://github.com/GcsSloop/AndroidNote/tree/master/Course/README.md) 序号 | 内容 :---:|-------- @@ -34,7 +34,7 @@ ****** -## [速查表](https://github.com/GcsSloop/AndroidNote/tree/master/QuickChart) +## [速查表](https://github.com/GcsSloop/AndroidNote/tree/master/QuickChart/README.md) 序号 | 内容 :---:|--------------- @@ -44,7 +44,7 @@ ****** -## [混沌水晶](https://github.com/GcsSloop/AndroidNote/tree/master/ChaosCrystal) +## [混沌水晶](https://github.com/GcsSloop/AndroidNote/tree/master/ChaosCrystal/README.md) 混沌水晶本身并没有太大功效,但与其他物品合成之后可能产生质的变化。 From ad7be6bf734cf52767f2a90084287c2db1443cd2 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:00:03 +0800 Subject: [PATCH 100/522] Update --- CustomView/Base/[1]CoordinateSystem.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Base/[1]CoordinateSystem.md b/CustomView/Base/[1]CoordinateSystem.md index 2e90e234..e4b1f9ab 100644 --- a/CustomView/Base/[1]CoordinateSystem.md +++ b/CustomView/Base/[1]CoordinateSystem.md @@ -1,7 +1,7 @@ # 安卓中的坐标系 ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) ## 一.屏幕坐标系和数学坐标系的区别 From 560fc7faa2f60d9e74c2fe4a26e6fae86c9af1e6 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:00:30 +0800 Subject: [PATCH 101/522] Update --- CustomView/Base/[2]AngleAndRadian.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Base/[2]AngleAndRadian.md b/CustomView/Base/[2]AngleAndRadian.md index 086c8181..e262ee81 100644 --- a/CustomView/Base/[2]AngleAndRadian.md +++ b/CustomView/Base/[2]AngleAndRadian.md @@ -1,7 +1,7 @@ # 角度与弧度 ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 安卓中角度(angle)与弧度(radian)的有关问题。 From e44d10d8eb671ea43a57951d8d99cd16fe2da6e0 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:00:47 +0800 Subject: [PATCH 102/522] Update --- CustomView/Base/[3]Color.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Base/[3]Color.md b/CustomView/Base/[3]Color.md index d27d00f4..f5b0b7c1 100644 --- a/CustomView/Base/[3]Color.md +++ b/CustomView/Base/[3]Color.md @@ -1,7 +1,7 @@ # 颜色 ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 简要介绍安卓中的颜色相关内容,包括颜色的定义,创建颜色的几种方式,以及颜色的混合模式等。 From d5240c909a424231931b4be3691c62d699cd87a6 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:02:26 +0800 Subject: [PATCH 103/522] Update --- CustomView/Advance/[1]CustomViewProcess.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[1]CustomViewProcess.md b/CustomView/Advance/[1]CustomViewProcess.md index 5d25f20b..c4fe7973 100644 --- a/CustomView/Advance/[1]CustomViewProcess.md +++ b/CustomView/Advance/[1]CustomViewProcess.md @@ -1,7 +1,7 @@ # 自定义View分类与流程 ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 经历过前面三篇啰啰嗦嗦的基础篇之后,终于到了进阶篇,正式进入解析自定义View的阶段。 From 7ddcae40ed05ccfad03d7508fe4a0a216d13aafa Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:02:55 +0800 Subject: [PATCH 104/522] Update --- CustomView/Advance/[2]Canvas_BasicGraphics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[2]Canvas_BasicGraphics.md b/CustomView/Advance/[2]Canvas_BasicGraphics.md index 0eacbedf..52fe87fd 100644 --- a/CustomView/Advance/[2]Canvas_BasicGraphics.md +++ b/CustomView/Advance/[2]Canvas_BasicGraphics.md @@ -1,7 +1,7 @@ # Canvas之绘制基本形状 ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 在上一篇[自定义View分类与流程](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B1%5DCustomViewProcess.md)中我们了解自定义View相关的基本知识,不过,这些东西依旧还是理论,并不能**拿来(zhuang)用(B)**, 这一次我们就了解一些**能(zhaung)用(B)**的东西。 From 0fb6445289d61ddb80de524a7bdd35aa7babb90f Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:03:15 +0800 Subject: [PATCH 105/522] Update --- CustomView/Advance/[3]Canvas_Convert.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[3]Canvas_Convert.md b/CustomView/Advance/[3]Canvas_Convert.md index 5d47a6a9..214ca7b6 100644 --- a/CustomView/Advance/[3]Canvas_Convert.md +++ b/CustomView/Advance/[3]Canvas_Convert.md @@ -1,7 +1,7 @@ # Canvas之画布操作 ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 上一篇[Canvas之绘制基本形状](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B2%5DCanvas_BasicGraphics.md)中我们了解了如何使用Canvas绘制基本图形,本次了解一些基本的画布操作。 From c0d5c0ecd4c3037b4b821cdc9abf02c6ef5f720e Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:04:01 +0800 Subject: [PATCH 106/522] Update --- CustomView/Advance/[4]Canvas_PictureText.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[4]Canvas_PictureText.md b/CustomView/Advance/[4]Canvas_PictureText.md index 401d21a4..c87e1bba 100644 --- a/CustomView/Advance/[4]Canvas_PictureText.md +++ b/CustomView/Advance/[4]Canvas_PictureText.md @@ -1,7 +1,7 @@ # Canvas之图片文字 ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 在上一篇文章[Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md)中我们了解了画布的一些基本操作方法,本次了解一些绘制图片文字相关的内容。如果你对前几篇文章讲述的内容熟练掌握的话,那么恭喜你,本篇结束之后,大部分的自定义View已经难不倒你了,当然了,这并不是终点,接下来还会有更加炫酷的技能。 From 7d293af3dfb6fcf686cef122341046f86ad2b160 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:04:30 +0800 Subject: [PATCH 107/522] Update --- CustomView/Advance/[5]Path_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[5]Path_Basic.md b/CustomView/Advance/[5]Path_Basic.md index acd7df0c..69a63c18 100644 --- a/CustomView/Advance/[5]Path_Basic.md +++ b/CustomView/Advance/[5]Path_Basic.md @@ -2,7 +2,7 @@ ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 在上一篇[Canvas之图片文字](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B4%5DCanvas_PictureText.md)中我们了解了如何使用Canvas中绘制图片文字,结合前几篇文章,Canvas的基本操作已经差不多完结了,然而Canvas不仅仅具有这些基本的操作,还可以更加炫酷,本次会了解到path(路径)这个Canvas中的神器,有了这个神器,就能创造出更多**炫(zhuang)酷(B)**的东东了。 From 81c13c86eefa83f00ee532fce2a525a76d8430c5 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:04:54 +0800 Subject: [PATCH 108/522] Update --- CustomView/Advance/[6]Path_Bezier.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[6]Path_Bezier.md b/CustomView/Advance/[6]Path_Bezier.md index cade573c..a202261b 100644 --- a/CustomView/Advance/[6]Path_Bezier.md +++ b/CustomView/Advance/[6]Path_Bezier.md @@ -1,7 +1,7 @@ # Path之贝塞尔曲线 ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 在上一篇文章[Path之基本图形](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B5%5DPath_BasicGraphics.md)中我们了解了Path的基本使用方法,本次了解Path中非常非常非常重要的内容-贝塞尔曲线。 From 5cab4881331c7fe44c440eb9a9f1f8562995ed90 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:05:17 +0800 Subject: [PATCH 109/522] Update --- CustomView/Advance/[7]Path_Over.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[7]Path_Over.md b/CustomView/Advance/[7]Path_Over.md index 88cbd1b7..58ee9a6e 100644 --- a/CustomView/Advance/[7]Path_Over.md +++ b/CustomView/Advance/[7]Path_Over.md @@ -1,7 +1,7 @@ # Path之完结篇(伪) ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 经历过前两篇 [Path之基本操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B5%5DPath_Basic.md) 和 [Path之贝塞尔曲线](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B6%5DPath_Bezier.md) 的讲解,本篇终于进入Path的收尾篇,本篇结束后Path的大部分相关方法都已经讲解完了,但Path还有一些更有意思的玩法,应该会在后续的文章中出现吧,嗯,应该会的ˊ_>ˋ From dcf74c8210bf720619c071181a82adbc0b5d4d55 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 23 Jul 2016 19:05:36 +0800 Subject: [PATCH 110/522] Update --- CustomView/Advance/[8]Path_Play.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[8]Path_Play.md b/CustomView/Advance/[8]Path_Play.md index eeca557b..c2a307fe 100644 --- a/CustomView/Advance/[8]Path_Play.md +++ b/CustomView/Advance/[8]Path_Play.md @@ -1,7 +1,7 @@ # Path之玩出花样(PathMeasure) ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 可以看到,在经过 From 5018f7722b73b67d9ba3aba171c10b8a5c72388d Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 24 Jul 2016 02:13:56 +0800 Subject: [PATCH 111/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 0102c308..0abe9ed0 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -39,6 +39,7 @@ $$)  +以上是仅以2D空间作为例子,然而我们在实际的软件开发过程中,为了有较好的空间层次感,可能都要求有一些3D效果,将3D效果的3维影像投影到2维的屏幕,也是依靠Matrix的转换。 ## 二、Matrix基本原理 @@ -95,6 +96,13 @@ $$) Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,我会尽量用通俗易懂的方式来帮助大家理解它。 +在讲解之前我们先简单的理解几个概念和其作用。 + +### 1.齐次坐标 + +* 作用: 用于区分坐标和向量,方便进行仿射变换。 +* 摘要: 在数学中我们的点和向量都是这样表示的(x, y),两者看起来一样,我们人可以根据上下文信息区分这是点还是向量,而计算机则无法区分,为此我们增加了一个标志位来让计算机也可以区分它们,增加时候看起来是这样:
+**点(x: y: 1) | 向量(x: y: 0)**
### 四大常用操作 From 900b30df7115ffd2d3e04bbb946d5660f133b8f9 Mon Sep 17 00:00:00 2001 From: sloopDate: Sun, 24 Jul 2016 02:33:08 +0800 Subject: [PATCH 112/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 0abe9ed0..67f49f41 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -102,7 +102,10 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, * 作用: 用于区分坐标和向量,方便进行仿射变换。 * 摘要: 在数学中我们的点和向量都是这样表示的(x, y),两者看起来一样,我们人可以根据上下文信息区分这是点还是向量,而计算机则无法区分,为此我们增加了一个标志位来让计算机也可以区分它们,增加时候看起来是这样:
-**点(x: y: 1) | 向量(x: y: 0)**
+**点(x : y : 1) - 向量(x : y : 0)**
+你可能注意到了,我将分隔符换成了冒号,这是因为齐次坐标具有等比的性质,(2:3:1)、(4:6:2)...(2N,3N,N)表示的均是(2,3)这一个点。 + +### ### 四大常用操作 From 27f613768d906bff1b7ef461930941edc5040648 Mon Sep 17 00:00:00 2001 From: sloopDate: Sun, 24 Jul 2016 02:37:49 +0800 Subject: [PATCH 113/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 67f49f41..13e1eaa5 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -103,7 +103,7 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, * 作用: 用于区分坐标和向量,方便进行仿射变换。 * 摘要: 在数学中我们的点和向量都是这样表示的(x, y),两者看起来一样,我们人可以根据上下文信息区分这是点还是向量,而计算机则无法区分,为此我们增加了一个标志位来让计算机也可以区分它们,增加时候看起来是这样:
**点(x : y : 1) - 向量(x : y : 0)**
-你可能注意到了,我将分隔符换成了冒号,这是因为齐次坐标具有等比的性质,(2:3:1)、(4:6:2)...(2N,3N,N)表示的均是(2,3)这一个点。 +你可能注意到了,我将分隔符换成了冒号,这是因为齐次坐标具有等比的性质,(2:3:1)、(4:6:2)...(2N,3N,N)表示的均是(2,3)这一个点。(这也是为什么会产生将MPERSP_2解释为scale这一误解了) ### From bb6329ce5c5285ee64097d36c4ea8c5e3371bbdd Mon Sep 17 00:00:00 2001 From: sloopDate: Sun, 24 Jul 2016 02:53:41 +0800 Subject: [PATCH 114/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 13e1eaa5..8989ea75 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -96,16 +96,23 @@ $$) Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,我会尽量用通俗易懂的方式来帮助大家理解它。 -在讲解之前我们先简单的理解几个概念和其作用。 +我们先简单的理解几个概念和其作用。 -### 1.齐次坐标 +### 1.齐次坐标系 -* 作用: 用于区分坐标和向量,方便进行仿射变换。 +* 作用: 方便区分坐标和向量,方便进行仿射变换。 * 摘要: 在数学中我们的点和向量都是这样表示的(x, y),两者看起来一样,我们人可以根据上下文信息区分这是点还是向量,而计算机则无法区分,为此我们增加了一个标志位来让计算机也可以区分它们,增加时候看起来是这样:
**点(x : y : 1) - 向量(x : y : 0)**
-你可能注意到了,我将分隔符换成了冒号,这是因为齐次坐标具有等比的性质,(2:3:1)、(4:6:2)...(2N,3N,N)表示的均是(2,3)这一个点。(这也是为什么会产生将MPERSP_2解释为scale这一误解了) +你可能注意到了,我将分隔符换成了冒号,这是因为齐次坐标具有等比的性质,(2:3:1)、(4:6:2)...(2N,3N,N)表示的均是(2,3)这一个点。(**这也是为什么会产生将MPERSP_2解释为scale这一误解了**) + +### 2.仿射变换 + +* 作用: 仿射变换其实是线性变换和平移变换的叠加,其实我们之前了解过的缩放,错切,旋转本质上都属于线性变换。对于我们android开发者而言,仿射变换对应的就是常见的四种画布操作(平移,旋转,缩放,错切)。 + +### 3.线性变换 + +#### a.缩放 -### ### 四大常用操作 From 687c7ce09d4abbbf90760363c81d2a2171308364 Mon Sep 17 00:00:00 2001 From: sloopDate: Sun, 24 Jul 2016 02:57:06 +0800 Subject: [PATCH 115/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 8989ea75..f6427cb5 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -107,10 +107,12 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, ### 2.仿射变换 -* 作用: 仿射变换其实是线性变换和平移变换的叠加,其实我们之前了解过的缩放,错切,旋转本质上都属于线性变换。对于我们android开发者而言,仿射变换对应的就是常见的四种画布操作(平移,旋转,缩放,错切)。 +* 作用: **仿射变换其实是线性变换和平移变换的叠加。**,我们之前了解过的缩放,错切,旋转本质上都属于线性变换。对于我们而言,仿射变换对应的就是常见的四种画布操作(平移,旋转,缩放,错切)。 +* 摘要: 我们之前说过,Matrix主要作用就是坐标的映射,仿射变换主要就是做这个工作的,详情请继续往下看。 ### 3.线性变换 + #### a.缩放 From 1a79990ba5e36974175cc95832a3c34149ecbdc5 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 24 Jul 2016 03:06:46 +0800 Subject: [PATCH 116/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index f6427cb5..9047ab88 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -107,14 +107,20 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, ### 2.仿射变换 -* 作用: **仿射变换其实是线性变换和平移变换的叠加。**,我们之前了解过的缩放,错切,旋转本质上都属于线性变换。对于我们而言,仿射变换对应的就是常见的四种画布操作(平移,旋转,缩放,错切)。 +* 作用: **仿射变换其实是线性变换和平移变换的叠加。**,我们之前了解过的 缩放、旋转、错切 本质上都属于线性变换。对于我们而言,仿射变换对应的就是常见的四种画布操作(缩放、旋转、错切、平移)。 * 摘要: 我们之前说过,Matrix主要作用就是坐标的映射,仿射变换主要就是做这个工作的,详情请继续往下看。 ### 3.线性变换 +线性变换主要有3种: 缩放(scale)、旋转(rotate) 和 错切(skew)。 + +下面我们就以坐标映射的角度来讲讲这几种操作。 #### a.缩放 +以点(10,10)为例,我们将x缩放到原来到0.5倍,y缩放到原来到2倍,我们可以轻易到算出结果:(10x0.5, 10x2) = (5, 20) + + ### 四大常用操作 From 49d4f26620d294ee9de5ee81c9d4977afa959e0d Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 24 Jul 2016 03:17:36 +0800 Subject: [PATCH 117/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 56 ++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 9047ab88..864f1909 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -114,12 +114,66 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, 线性变换主要有3种: 缩放(scale)、旋转(rotate) 和 错切(skew)。 -下面我们就以坐标映射的角度来讲讲这几种操作。 +线性变换均可用矩阵乘法完成(不了解矩阵乘法规则的参考下面维基百科),下面我们就来讲讲这几种操作。 + +**[维基百科-矩阵乘法](https://zh.wikipedia.org/wiki/%E7%9F%A9%E9%99%A3%E4%B9%98%E6%B3%95)** #### a.缩放 以点(10,10)为例,我们将x缩放到原来到0.5倍,y缩放到原来到2倍,我们可以轻易到算出结果:(10x0.5, 10x2) = (5, 20) +矩阵计算公式: + + + + +用计算示例: + + ### 四大常用操作 From f3a7930302ae314a44c8b6ea5618566d890ecf71 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 24 Jul 2016 15:58:35 +0800 Subject: [PATCH 118/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 864f1909..9da46279 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -175,6 +175,10 @@ $$ \\right ] $$) +#### b.错切 + + + ### 四大常用操作 From 7bdc9f3486e88baac1450c15d0f267b081d8be8d Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 24 Jul 2016 22:25:44 +0800 Subject: [PATCH 119/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 9da46279..13d6c242 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -107,7 +107,7 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, ### 2.仿射变换 -* 作用: **仿射变换其实是线性变换和平移变换的叠加。**,我们之前了解过的 缩放、旋转、错切 本质上都属于线性变换。对于我们而言,仿射变换对应的就是常见的四种画布操作(缩放、旋转、错切、平移)。 +* 作用: **仿射变换其实是线性变换和平移变换的叠加。**我们之前了解过的 缩放、旋转、错切 本质上都属于线性变换。对于我们而言,仿射变换对应的就是常见的四种画布操作(缩放、旋转、错切、平移)。 * 摘要: 我们之前说过,Matrix主要作用就是坐标的映射,仿射变换主要就是做这个工作的,详情请继续往下看。 ### 3.线性变换 @@ -180,6 +180,7 @@ $$) + ### 四大常用操作 我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的四种画布操作(translate, scale, rotate, skew),这些操作的核心就是改变Matrix的数值,接下来我们看看这四种操作都会影响到哪些数值。 From 8e349569ab197d18d7f34f6e98613e3db4ef6ff3 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 24 Jul 2016 23:14:42 +0800 Subject: [PATCH 120/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 13d6c242..e68cca82 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -101,7 +101,7 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, ### 1.齐次坐标系 * 作用: 方便区分坐标和向量,方便进行仿射变换。 -* 摘要: 在数学中我们的点和向量都是这样表示的(x, y),两者看起来一样,我们人可以根据上下文信息区分这是点还是向量,而计算机则无法区分,为此我们增加了一个标志位来让计算机也可以区分它们,增加时候看起来是这样:
+* 摘要: 在数学中我们的点和向量都是这样表示的(x, y),两者看起来一样,我们人可以根据上下文信息区分这是点还是向量,而计算机则无法区分,为此我们增加了一个标志位来让计算机也可以区分它们,增加之后看起来是这样:
**点(x : y : 1) - 向量(x : y : 0)**
你可能注意到了,我将分隔符换成了冒号,这是因为齐次坐标具有等比的性质,(2:3:1)、(4:6:2)...(2N,3N,N)表示的均是(2,3)这一个点。(**这也是为什么会产生将MPERSP_2解释为scale这一误解了**) From 4536a71fd74f29d9974fc24935daee9223d20a3b Mon Sep 17 00:00:00 2001 From: sloopDate: Mon, 25 Jul 2016 05:39:42 +0800 Subject: [PATCH 121/522] Update --- README.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.md b/README.md index d4df808c..be955ac3 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,13 @@ > #### PS:点击分类标题可以查看该分类的详细信息。 +## 目录 + +- [自定义View系列](#自定义View系列) +- [教程类](#教程类) +- [速查表](#速查表) +- [混沌水晶](#混沌水晶) + ## [自定义View系列](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 序号 | 内容 From 25cedef3586f0f74d43f7bb6d735af592b61ac8c Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 25 Jul 2016 05:41:08 +0800 Subject: [PATCH 122/522] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index be955ac3..ada82d68 100644 --- a/README.md +++ b/README.md @@ -69,5 +69,4 @@ - - +[▲ 回到顶部](#目录) From b5eada82f3d32906c8250983d4780ad358b22243 Mon Sep 17 00:00:00 2001 From: sloop
Date: Mon, 25 Jul 2016 05:42:44 +0800 Subject: [PATCH 123/522] Update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ada82d68..49ece0f4 100644 --- a/README.md +++ b/README.md @@ -69,4 +69,4 @@ -[▲ 回到顶部](#目录) +[▲ 回到顶部](#top) From d37971d88f5590b300c4e9905cc04e48704b996d Mon Sep 17 00:00:00 2001 From: sloop
Date: Mon, 25 Jul 2016 17:13:40 +0800 Subject: [PATCH 124/522] Update --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 49ece0f4..5d318b28 100644 --- a/README.md +++ b/README.md @@ -62,11 +62,26 @@ * [ADB常用命令](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/ADB%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.md) +## 版权声明 + +* 所有原创文章(未进行特殊标识的均属于原创) 的著作权属于 **GcsSloop**。 +* 所有转载文章(标题注明`[转]`的所有文章) 的著作权属于原作者。 +* 所有译文文章(标题注明`[译]`的所有文章) 的原文著作权属于原作者,译文著作权属于 **GcsSloop**。 + +#### 转载注意事项 + +除注明外,所有文章均采用 [Creative Commons BY-NC-ND 4.0(自由转载-保持署名-非商用-禁止演绎)](http://creativecommons.org/licenses/by-nc-nd/4.0/deed.zh)协议发布。 + +你可以在非商业的前提下免费转载,但同时你必须: + +* 保持文章原文,不作修改。 +* 明确署名,即至少注明 `作者:GcsSloop` 字样以及文章的原始链接,且不得使用 `rel="nofollow"` 标记。 + + ## About Me ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) - [▲ 回到顶部](#top) From 4801c4d59b8b87d74c1b8c3bb4616fa02febcadb Mon Sep 17 00:00:00 2001 From: sloop
Date: Mon, 25 Jul 2016 17:14:57 +0800 Subject: [PATCH 125/522] Update --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5d318b28..203d8474 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,13 @@ ## 目录 -- [自定义View系列](#自定义View系列) +- [CustomView](#CustomView) - [教程类](#教程类) - [速查表](#速查表) - [混沌水晶](#混沌水晶) +- [版权声明](#版权声明) -## [自定义View系列](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) +## [CustomView](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) 序号 | 内容 :----:|--------- From 548225d24c8cf9fdb39cbd314fe4cbc46013aa60 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 03:13:12 +0800 Subject: [PATCH 126/522] Update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 203d8474..8baca8af 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ 08 | [安卓自定义View进阶 - Path基本操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B5%5DPath_Basic.md) 09 | [安卓自定义View进阶 - 贝塞尔曲线](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B6%5DPath_Bezier.md) 10 | [安卓自定义View进阶 - Path完结篇(伪)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B7%5DPath_Over.md) - 11 | [安卓自定义View进阶 - Path玩出花样](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B8%5DPath_Play.md) + 11 | [安卓自定义View进阶 - Path玩出花样(PathMeasure)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B8%5DPath_Play.md) ****** From 78fc46851df8e314c9edceefcfd1c1913aa51b6a Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 03:17:33 +0800 Subject: [PATCH 127/522] Update --- README.md | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 8baca8af..fc23be1d 100644 --- a/README.md +++ b/README.md @@ -8,27 +8,27 @@ ## 目录 -- [CustomView](#CustomView) +- [自定义View](#自定义View) - [教程类](#教程类) - [速查表](#速查表) - [混沌水晶](#混沌水晶) - [版权声明](#版权声明) -## [CustomView](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) +## [自定义View](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) - 序号 | 内容 -:----:|--------- - 01 | [安卓自定义View基础 - 坐标系](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B1%5DCoordinateSystem.md) - 02 | [安卓自定义View基础 - 角度弧度](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B2%5DAngleAndRadian.md) - 03 | [安卓自定义View基础 - 颜色](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B3%5DColor.md) - 04 | [安卓自定义View进阶 - 分类和流程](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B1%5DCustomViewProcess.md) - 05 | [安卓自定义View进阶 - 绘制基本图形](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B2%5DCanvas_BasicGraphics.md) - 06 | [安卓自定义View进阶 - 画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) - 07 | [安卓自定义View进阶 - 图片文字](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B4%5DCanvas_PictureText.md) - 08 | [安卓自定义View进阶 - Path基本操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B5%5DPath_Basic.md) - 09 | [安卓自定义View进阶 - 贝塞尔曲线](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B6%5DPath_Bezier.md) - 10 | [安卓自定义View进阶 - Path完结篇(伪)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B7%5DPath_Over.md) - 11 | [安卓自定义View进阶 - Path玩出花样(PathMeasure)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B8%5DPath_Play.md) +* 基础篇 + * [安卓自定义View基础 - 坐标系](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B1%5DCoordinateSystem.md) + * [安卓自定义View基础 - 角度弧度](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B2%5DAngleAndRadian.md) + * [安卓自定义View基础 - 颜色](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B3%5DColor.md) +* 进阶篇 + * [安卓自定义View进阶 - 分类和流程](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B1%5DCustomViewProcess.md) + * [安卓自定义View进阶 - 绘制基本图形](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B2%5DCanvas_BasicGraphics.md) + * [安卓自定义View进阶 - 画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) + * [安卓自定义View进阶 - 图片文字](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B4%5DCanvas_PictureText.md) + * [安卓自定义View进阶 - Path基本操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B5%5DPath_Basic.md) + * [安卓自定义View进阶 - 贝塞尔曲线](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B6%5DPath_Bezier.md) + * [安卓自定义View进阶 - Path完结篇(伪)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B7%5DPath_Over.md) + * [安卓自定义View进阶 - Path玩出花样(PathMeasure)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B8%5DPath_Play.md) ****** From 20baed58980333fc40a7a9bdefe75c53f1d3a14f Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 03:48:41 +0800 Subject: [PATCH 128/522] Update --- CustomView/Advance/[3]Canvas_Convert.md | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/CustomView/Advance/[3]Canvas_Convert.md b/CustomView/Advance/[3]Canvas_Convert.md index 214ca7b6..5a8ca1c2 100644 --- a/CustomView/Advance/[3]Canvas_Convert.md +++ b/CustomView/Advance/[3]Canvas_Convert.md @@ -19,7 +19,7 @@ 顶点操作 | drawVertices, drawBitmapMesh | 通过对顶点操作可以使图像形变,drawVertices直接对画布作用、 drawBitmapMesh只对绘制的Bitmap作用 画布剪裁 | clipPath, clipRect | 设置画布的显示区域 画布快照 | save, restore, saveLayerXxx, restoreToCount, getSaveCount | 依次为 保存当前状态、 回滚到上一次保存的状态、 保存图层状态、 回滚到指定状态、 获取保存次数 -画布变换 | translate, scale, rotate, skew | 依次为 位移、缩放、 旋转、倾斜 +画布变换 | translate, scale, rotate, skew | 依次为 位移、缩放、 旋转、错切 Matrix(矩阵) | getMatrix, setMatrix, concat | 实际上画布的位移,缩放等操作的都是图像矩阵Matrix, 只不过Matrix比较难以理解和使用,故封装了一些常用的方法。 ****** @@ -265,17 +265,15 @@ Matrix(矩阵) | getMatrix, setMatrix, concat | 实际上画布的位移,缩 ***** -#### ⑷倾斜(skew) +#### ⑷错切(skew) -skew这里翻译为倾斜,有的地方也叫错切。 +skew这里翻译为错切,错切是特殊线性变换的一种。 -倾斜只提供了一种方法: +错切只提供了一种方法: ``` java public void skew (float sx, float sy) ``` -参数含义:
-float sx:将画布在x方向上倾斜相应的角度,sx倾斜角度的tan值,
-float sy:将画布在y轴方向上倾斜相应的角度,sy为倾斜角度的tan值. + 示例: ``` java @@ -287,14 +285,14 @@ float sy:将画布在y轴方向上倾斜相应的角度,sy为倾斜角度的ta mPaint.setColor(Color.BLACK); // 绘制黑色矩形 canvas.drawRect(rect,mPaint); - canvas.skew(1,0); // 在x轴倾斜45度 <-- tan45 = 1 + canvas.skew(1,0); // 错切 mPaint.setColor(Color.BLUE); // 绘制蓝色矩形 canvas.drawRect(rect,mPaint); ```-如你所想,倾斜也是可叠加的,不过请注意,调用次序不同绘制结果也会不同 +如你所想,错切也是可叠加的,不过请注意,调用次序不同绘制结果也会不同 ``` java // 将坐标系原点移动到画布正中心 canvas.translate(mWidth / 2, mHeight / 2); @@ -304,8 +302,8 @@ float sy:将画布在y轴方向上倾斜相应的角度,sy为倾斜角度的ta mPaint.setColor(Color.BLACK); // 绘制黑色矩形 canvas.drawRect(rect,mPaint); - canvas.skew(1,0); // 在x轴倾斜45度 <-- tan45 = 1 - canvas.skew(0,1); // 在y轴倾斜45度 <-- tan45 = 1 + canvas.skew(1,0); // 错切 + canvas.skew(0,1); // 错切 mPaint.setColor(Color.BLUE); // 绘制蓝色矩形 canvas.drawRect(rect,mPaint); From 8da53fc85c3c9e829f4f779b187072449166b3ef Mon Sep 17 00:00:00 2001 From: sloop
Date: Tue, 26 Jul 2016 03:56:26 +0800 Subject: [PATCH 129/522] Update --- CustomView/Advance/[3]Canvas_Convert.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[3]Canvas_Convert.md b/CustomView/Advance/[3]Canvas_Convert.md index 5a8ca1c2..b3a326c8 100644 --- a/CustomView/Advance/[3]Canvas_Convert.md +++ b/CustomView/Advance/[3]Canvas_Convert.md @@ -267,13 +267,18 @@ Matrix(矩阵) | getMatrix, setMatrix, concat | 实际上画布的位移,缩 ***** #### ⑷错切(skew) -skew这里翻译为错切,错切是特殊线性变换的一种。 +skew这里翻译为错切,错切是特殊类型的线性变换。 错切只提供了一种方法: ``` java public void skew (float sx, float sy) ``` +变换后: +``` +X = x + sx * y +Y = sy * x + y +``` 示例: ``` java From 5d0cb7a99bb85b5c2ba3e0161975fa6483618d08 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 04:01:42 +0800 Subject: [PATCH 130/522] Update --- CustomView/Advance/[3]Canvas_Convert.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[3]Canvas_Convert.md b/CustomView/Advance/[3]Canvas_Convert.md index b3a326c8..fddd7c62 100644 --- a/CustomView/Advance/[3]Canvas_Convert.md +++ b/CustomView/Advance/[3]Canvas_Convert.md @@ -295,7 +295,7 @@ Y = sy * x + y mPaint.setColor(Color.BLUE); // 绘制蓝色矩形 canvas.drawRect(rect,mPaint); ``` - +
如你所想,错切也是可叠加的,不过请注意,调用次序不同绘制结果也会不同 ``` java From af18b6a8511f5f9a5dcc0c26698bfe1a0f7c5d57 Mon Sep 17 00:00:00 2001 From: sloop
Date: Tue, 26 Jul 2016 04:03:36 +0800 Subject: [PATCH 131/522] Update --- CustomView/Advance/[2]Canvas_BasicGraphics.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[2]Canvas_BasicGraphics.md b/CustomView/Advance/[2]Canvas_BasicGraphics.md index 52fe87fd..773c4497 100644 --- a/CustomView/Advance/[2]Canvas_BasicGraphics.md +++ b/CustomView/Advance/[2]Canvas_BasicGraphics.md @@ -29,7 +29,7 @@ Canvas我们可以称之为画布,能够在上面绘制各种东西,是安 顶点操作 | drawVertices, drawBitmapMesh | 通过对顶点操作可以使图像形变,drawVertices直接对画布作用、 drawBitmapMesh只对绘制的Bitmap作用 画布剪裁 | clipPath, clipRect | 设置画布的显示区域 画布快照 | save, restore, saveLayerXxx, restoreToCount, getSaveCount | 依次为 保存当前状态、 回滚到上一次保存的状态、 保存图层状态、 回滚到指定状态、 获取保存次数 -画布变换 | translate, scale, rotate, skew | 依次为 位移、缩放、 旋转、倾斜 +画布变换 | translate, scale, rotate, skew | 依次为 位移、缩放、 旋转、错切 Matrix(矩阵) | getMatrix, setMatrix, concat | 实际画布的位移,缩放等操作的都是图像矩阵Matrix,只不过Matrix比较难以理解和使用,故封装了一些常用的方法。 > PS: Canvas常用方法在上面表格中已经全部列出了,当然还存在一些其他的方法未列出,具体可以参考官方文档 [Canvas](http://developer.android.com/reference/android/graphics/Canvas.html) From 00364a40ce8a500873a333a959052eac57c98d3c Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 04:03:57 +0800 Subject: [PATCH 132/522] Update --- CustomView/Advance/[4]Canvas_PictureText.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[4]Canvas_PictureText.md b/CustomView/Advance/[4]Canvas_PictureText.md index c87e1bba..94fecc07 100644 --- a/CustomView/Advance/[4]Canvas_PictureText.md +++ b/CustomView/Advance/[4]Canvas_PictureText.md @@ -17,7 +17,7 @@ 顶点操作 | drawVertices, drawBitmapMesh | 通过对顶点操作可以使图像形变,drawVertices直接对画布作用、 drawBitmapMesh只对绘制的Bitmap作用 画布剪裁 | clipPath, clipRect | 设置画布的显示区域 画布快照 | save, restore, saveLayerXxx, restoreToCount, getSaveCount | 依次为 保存当前状态、 回滚到上一次保存的状态、 保存图层状态、 回滚到指定状态、 获取保存次数 -画布变换 | translate, scale, rotate, skew | 依次为 位移、缩放、 旋转、倾斜 +画布变换 | translate, scale, rotate, skew | 依次为 位移、缩放、 旋转、错切 Matrix(矩阵) | getMatrix, setMatrix, concat | 实际上画布的位移,缩放等操作的都是图像矩阵Matrix, 只不过Matrix比较难以理解和使用,故封装了一些常用的方法。 ****** From 2f33ba171c394cffadff5dd5b9a1bb116167ab69 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 04:04:44 +0800 Subject: [PATCH 133/522] Update --- QuickChart/Canvas.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/QuickChart/Canvas.md b/QuickChart/Canvas.md index 709e5b96..066f0967 100644 --- a/QuickChart/Canvas.md +++ b/QuickChart/Canvas.md @@ -10,5 +10,5 @@ 顶点操作 | drawVertices, drawBitmapMesh | 通过对顶点操作可以使图像形变,drawVertices直接对画布作用、 drawBitmapMesh只对绘制的Bitmap作用 画布剪裁 | clipPath, clipRect | 设置画布的显示区域 画布快照 | save, restore, saveLayerXxx, restoreToCount, getSaveCount | 依次为 保存当前状态、 回滚到上一次保存的状态、 保存图层状态、 会滚到指定状态、 获取保存次数
**相关链接:**
[【Canvas-画布操作】](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) -画布变换 | translate, scale, rotate, skew | 依次为 位移、缩放、 旋转、倾斜
**相关链接:**
[【基础-坐标系】](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B1%5DCoordinateSystem.md)
[【基础-角度弧度】](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B2%5DAngleAndRadian.md)
[【Canvas-画布操作】](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) +画布变换 | translate, scale, rotate, skew | 依次为 位移、缩放、 旋转、错切
**相关链接:**
[【基础-坐标系】](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B1%5DCoordinateSystem.md)
[【基础-角度弧度】](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B2%5DAngleAndRadian.md)
[【Canvas-画布操作】](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) Matrix(矩阵) | getMatrix, setMatrix, concat | 实际画布的位移,缩放等操作的都是图像矩阵Matrix,只不过Matrix比较难以理解和使用,故封装了一些常用的方法。 From ae650f8c74bd30d8eb32a38551ec272880d742f1 Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 26 Jul 2016 04:07:53 +0800 Subject: [PATCH 134/522] Update --- README.md | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index fc23be1d..903d3ff8 100644 --- a/README.md +++ b/README.md @@ -35,20 +35,16 @@ ## [教程类](https://github.com/GcsSloop/AndroidNote/tree/master/Course/README.md) -序号 | 内容 -:---:|-------- - 01 | [在AndroidStudio中使用PlantUML](https://github.com/GcsSloop/AndroidNote/blob/master/Course/HowToUsePlantUMLInAS.md) - 02 | [优雅的发布Android开源库(论JitPack的优越性)](https://github.com/GcsSloop/AndroidNote/blob/master/Course/ReleaseLibraryByJitPack.md) +* [在AndroidStudio中使用PlantUML](https://github.com/GcsSloop/AndroidNote/blob/master/Course/HowToUsePlantUMLInAS.md) +* [优雅的发布Android开源库(论JitPack的优越性)](https://github.com/GcsSloop/AndroidNote/blob/master/Course/ReleaseLibraryByJitPack.md) ****** ## [速查表](https://github.com/GcsSloop/AndroidNote/tree/master/QuickChart/README.md) -序号 | 内容 -:---:|--------------- - 01 | [Canvas常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Canvas.md) - 02 | [Path常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Path.md) - 03 | [贝塞尔曲线常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Bezier.md) +* [Canvas常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Canvas.md) +* [Path常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Path.md) +* [贝塞尔曲线常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Bezier.md) ****** From b80b8efae0d61fb9c2ae520e953b70ebc7efa137 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 04:20:03 +0800 Subject: [PATCH 135/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 36 +++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index e68cca82..2512ba8d 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -122,7 +122,7 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, 以点(10,10)为例,我们将x缩放到原来到0.5倍,y缩放到原来到2倍,我们可以轻易到算出结果:(10x0.5, 10x2) = (5, 20) -矩阵计算公式: +计算公式:  -用计算示例: +计算示例:  #### b.错切 +计算公式: + + + +``` +X = x + Skew_X * y +Y = Skew_Y * x + y +``` + +计算示例: From 8a62dd35f2da130925e14f534c6a105b18750c68 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 04:36:27 +0800 Subject: [PATCH 136/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 2512ba8d..36a2ae9e 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -177,6 +177,8 @@ $$) #### b.错切 +错切有水平错切(平行X轴)和垂直错切(平行Y轴),或者是两者叠加。 + 计算公式:  From d784f0d6b76458c4a472b4eafbc0b995eb3f135a Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 04:37:19 +0800 Subject: [PATCH 137/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 36a2ae9e..bbfb276d 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -237,6 +237,10 @@ $$ $$) +#### b.旋转 + + + ### 四大常用操作 From ec488ac8677dd60c5884d1654661276d02a2b86d Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 05:13:51 +0800 Subject: [PATCH 138/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 48 ++++++++++++++++++++++----- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index bbfb276d..24b754dd 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -122,7 +122,7 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, 以点(10,10)为例,我们将x缩放到原来到0.5倍,y缩放到原来到2倍,我们可以轻易到算出结果:(10x0.5, 10x2) = (5, 20) -计算公式: +**计算公式:**  -计算示例: +**计算示例:**  错切有水平错切(平行X轴)和垂直错切(平行Y轴),或者是两者叠加。 -计算公式: +**计算公式:**  @@ -239,6 +239,38 @@ $$) #### b.旋转 +**计算公式:** + +逆时针旋转 a 度。 + + & -sin(a) \\\\ +sin(a) & cos(a) +\\end{1} +\\right ] + . +\\left [ +\\begin{matrix} +x\\\\ +y +\\end{1} +\\right ] +$$) + + + + +**计算示例:** From 252f4635ec9e927888cb3242264038f6e3c6c351 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 05:16:35 +0800 Subject: [PATCH 139/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 57 +-------------------------- 1 file changed, 1 insertion(+), 56 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 24b754dd..83ed1e71 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -149,32 +149,6 @@ y $$) -**计算示例:** - - - #### b.错切 错切有水平错切(平行X轴)和垂直错切(平行Y轴),或者是两者叠加。 @@ -210,33 +184,6 @@ X = x + Skew_X * y Y = Skew_Y * x + y ``` -**计算示例:** - - - - #### b.旋转 **计算公式:** @@ -268,9 +215,7 @@ y $$) - - -**计算示例:** +### 4.平移变换 From 90fa79a6035c3db1b19f2b74257c61009452a145 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 05:17:46 +0800 Subject: [PATCH 140/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 83ed1e71..c61c7f1d 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -122,8 +122,6 @@ Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识, 以点(10,10)为例,我们将x缩放到原来到0.5倍,y缩放到原来到2倍,我们可以轻易到算出结果:(10x0.5, 10x2) = (5, 20) -**计算公式:** -  错切有水平错切(平行X轴)和垂直错切(平行Y轴),或者是两者叠加。 -**计算公式:** -  -### 四大常用操作 - -我们之前在 [Canvas之画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 中讲解过的四种画布操作(translate, scale, rotate, skew),这些操作的核心就是改变Matrix的数值,接下来我们看看这四种操作都会影响到哪些数值。 - - - From b37a628af9940ab15646dde74c382d9dd4e9bccf Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 05:39:21 +0800 Subject: [PATCH 141/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index c61c7f1d..c1bc8072 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -211,6 +211,9 @@ $$) ### 4.平移变换 +我们可以看到,在之前的示例中,用的都是 2 x 2 的矩阵,但我们实际的矩阵是 3 x 3 的,这是为什么呢? + +前面的各种方法我们都是直接 From 2b7308a0ebb426afdfeb9104344658ff21972c50 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 05:47:07 +0800 Subject: [PATCH 142/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index c1bc8072..202936f4 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -5,8 +5,9 @@ 前面讲了四篇 Path 相关的内容,经过长时间的拖更,终于要到了大家期盼已久的 Matrix, 一个与黑客帝国同名的东东,看名字就知道很不凡,接下来我们就看看这个 Matrix 到底是何方神圣。 +  - + ****** From be4016f74658886db551ba8ad20320456cbcd7f2 Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 26 Jul 2016 06:02:36 +0800 Subject: [PATCH 143/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 72 ++++----------------------- 1 file changed, 9 insertions(+), 63 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 202936f4..5b38568d 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -5,15 +5,15 @@ 前面讲了四篇 Path 相关的内容,经过长时间的拖更,终于要到了大家期盼已久的 Matrix, 一个与黑客帝国同名的东东,看名字就知道很不凡,接下来我们就看看这个 Matrix 到底是何方神圣。 -  - ****** ## 一、Matrix简介 -如题,本篇的主角是 Matrix,其实和黑客帝国并没有太大关系,它看起来大概是下面这样: +**如题,本篇的主角是 Matrix,其实和黑客帝国并没有太大关系, Matrix是一个矩阵,也一个控制视图状态的模型,主要功能是坐标映射,数值转换。** + +它看起来大概是下面这样:  -### Matrix概念: Matrix的翻译过来是矩阵,模型。和其释义相同,Matrix是一个矩阵,也一个控制视图状态的模型,主要功能是坐标映射,数值转换。 +**为了帮助大家理解Matrix的作用,在这里简单的举一个例子:** 我的的手机屏幕作为物理设备,其坐标系是从左上角开始的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系。 @@ -42,37 +42,7 @@ $$) 以上是仅以2D空间作为例子,然而我们在实际的软件开发过程中,为了有较好的空间层次感,可能都要求有一些3D效果,将3D效果的3维影像投影到2维的屏幕,也是依靠Matrix的转换。 -## 二、Matrix基本原理 - -Matrix 本质是一个 3x3 的矩阵,里面有9个数值,分别用于控制视图的不同属性,大致如下: - - - - -序号 | 名称 | 对应单词 | 摘要 ------|----------|-------------|-------------- - 0 | MSCALE_X | scale | 控制X坐标 缩放,旋转 - 1 | MSKEW_X | skew | 控制X坐标 错切,旋转 - 2 | MTRANS_X | transfer | 控制X坐标 位移 - 3 | MSKEW_Y | skew | 控制Y坐标 错切,旋转 - 4 | MSCALE_Y | scale | 控制Y坐标 缩放,旋转 - 5 | MTRANS_Y | transfer | 控制Y坐标 位移 - 6 | MPERSP_0 | perspective | 控制透视 (绕Y轴旋转) - 7 | MPERSP_1 | perspective | 控制透视 (绕X轴旋转) - 8 | MPERSP_2 | perspective | 控制透视 (齐次坐标标志位,通常为1) - -从上表中可以看出一些内容,下面我们看一下2D画布中常用的四种操作(translate, scale, rotate, skew)都是由哪些参数控制的。 +下面我们看一下2D画布中常用的四种操作(translate, scale, rotate, skew)都是由哪些参数控制的。   @@ -95,28 +65,11 @@ $$) ## 三、Matrix详解 -Matrix 是一个矩阵,肯定会涉及到一些比较麻烦的理论知识,我会尽量用通俗易懂的方式来帮助大家理解它。 - -我们先简单的理解几个概念和其作用。 - -### 1.齐次坐标系 - -* 作用: 方便区分坐标和向量,方便进行仿射变换。 -* 摘要: 在数学中我们的点和向量都是这样表示的(x, y),两者看起来一样,我们人可以根据上下文信息区分这是点还是向量,而计算机则无法区分,为此我们增加了一个标志位来让计算机也可以区分它们,增加之后看起来是这样:
-**点(x : y : 1) - 向量(x : y : 0)**
-你可能注意到了,我将分隔符换成了冒号,这是因为齐次坐标具有等比的性质,(2:3:1)、(4:6:2)...(2N,3N,N)表示的均是(2,3)这一个点。(**这也是为什么会产生将MPERSP_2解释为scale这一误解了**) +Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就看看几种常见的变换原理: -### 2.仿射变换 - -* 作用: **仿射变换其实是线性变换和平移变换的叠加。**我们之前了解过的 缩放、旋转、错切 本质上都属于线性变换。对于我们而言,仿射变换对应的就是常见的四种画布操作(缩放、旋转、错切、平移)。 -* 摘要: 我们之前说过,Matrix主要作用就是坐标的映射,仿射变换主要就是做这个工作的,详情请继续往下看。 - -### 3.线性变换 - -线性变换主要有3种: 缩放(scale)、旋转(rotate) 和 错切(skew)。 - -线性变换均可用矩阵乘法完成(不了解矩阵乘法规则的参考下面维基百科),下面我们就来讲讲这几种操作。 +常见的基本变换有4种: 平移(translate)、缩放(scale)、旋转(rotate) 和 错切(skew)。 +由于我们以下大部分的计算都是基于矩阵乘法规则,如果你已经把线性代数还给了老师,请参考一下这里: **[维基百科-矩阵乘法](https://zh.wikipedia.org/wiki/%E7%9F%A9%E9%99%A3%E4%B9%98%E6%B3%95)** #### a.缩放 @@ -176,11 +129,6 @@ y \\right ] $$) -``` -X = x + Skew_X * y -Y = Skew_Y * x + y -``` - #### b.旋转 逆时针旋转 a 度。 @@ -228,9 +176,7 @@ $$) -## Matrix方法表 - -Matrix 有很多常用和不常用的方法, +**Matrix方法表** 方法类别 | 相关API | 摘要 -----------|---------------------------------------------------------|------------------------ From 66743a53904f2f8da791e1744d72390d071a571a Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 26 Jul 2016 06:04:45 +0800 Subject: [PATCH 144/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 5b38568d..58c6878e 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -28,20 +28,6 @@ MPERSP\\_0 & MPERSP\\_1 & MPERSP\\_2 \\right ] $$) -**为了帮助大家理解Matrix的作用,在这里简单的举一个例子:** - -我的的手机屏幕作为物理设备,其坐标系是从左上角开始的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系。 - -以下图为例,我们的内容区和屏幕坐标系还相差一个通知栏加一个标题栏的距离,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的屏幕坐标系来绘制,Matrix在此处的作用就是转换这些数值。 - -> -假设通知栏高度为20像素,导航栏高度为40像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点。 - - - - -以上是仅以2D空间作为例子,然而我们在实际的软件开发过程中,为了有较好的空间层次感,可能都要求有一些3D效果,将3D效果的3维影像投影到2维的屏幕,也是依靠Matrix的转换。 - 下面我们看一下2D画布中常用的四种操作(translate, scale, rotate, skew)都是由哪些参数控制的。  @@ -52,8 +38,6 @@ $$) ### 常见误解 -在写本文之前,我翻阅很多介绍 Matrix 的文章和官方文档,但其中文的搜索结果令我很悲伤,大部分的中文文章对Matrix都存在误解,想当然的创造出一些错误的理论, 导致很多(抄袭)的文章都是这一错误的理论,不知道要坑害多少小白,常见的错误理论有: - **1.认为Matrix最下面的一行的三个参数(MPERSP_0、MPERSP_1、MPERSP_2)没有什么太大的作用,在这里只是为了凑数。** > **实际上最后一行参数在3D变换中有着至关重要的作用,这一点会在后面中Camera一文中详细介绍。** From e894945d7dfd78608b769a239f2d0596c08b8f7d Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:05:18 +0800 Subject: [PATCH 145/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 58c6878e..399f8dbd 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -11,7 +11,7 @@ ## 一、Matrix简介 -**如题,本篇的主角是 Matrix,其实和黑客帝国并没有太大关系, Matrix是一个矩阵,也一个控制视图状态的模型,主要功能是坐标映射,数值转换。** +**本篇的主角是 Matrix,其实和黑客帝国并没有太大关系, Matrix是一个矩阵,主要功能是坐标映射,数值转换。** 它看起来大概是下面这样: From 4cb987d033d4801b76a70c7785d65e050eedb3ff Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:08:13 +0800 Subject: [PATCH 146/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 399f8dbd..78f43c6e 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -3,15 +3,13 @@ ## 前言 -前面讲了四篇 Path 相关的内容,经过长时间的拖更,终于要到了大家期盼已久的 Matrix, 一个与黑客帝国同名的东东,看名字就知道很不凡,接下来我们就看看这个 Matrix 到底是何方神圣。 - - +经过长时间的拖更,终于要到了大家期盼已久的 Matrix。 ****** ## 一、Matrix简介 -**本篇的主角是 Matrix,其实和黑客帝国并没有太大关系, Matrix是一个矩阵,主要功能是坐标映射,数值转换。** +**Matrix是一个矩阵,主要功能是坐标映射,数值转换。** 它看起来大概是下面这样: From 6dc24694fdd477e488eb98f3c03caacf1b0dc93e Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:08:56 +0800 Subject: [PATCH 147/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 78f43c6e..757a895b 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,13 +1,13 @@ # Matrix基础篇 -## 前言 +## 目录 -经过长时间的拖更,终于要到了大家期盼已久的 Matrix。 +- [Matrix简介](#Matrix简介) ****** -## 一、Matrix简介 +## Matrix简介 **Matrix是一个矩阵,主要功能是坐标映射,数值转换。** From 6a5251b0e32866270aa459ad0a31b64c62f4bda2 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:10:26 +0800 Subject: [PATCH 148/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 757a895b..99c9d580 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -4,6 +4,8 @@ ## 目录 - [Matrix简介](#Matrix简介) + - [常见误解](#常见误解) +- [Matrix详解](#Matrix详解) ****** @@ -45,7 +47,7 @@ $$) > **的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。** -## 三、Matrix详解 +## Matrix详解 Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就看看几种常见的变换原理: From 733e73ffdb285ecc0c4ce2e5c4a4c0bd2e360659 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:13:17 +0800 Subject: [PATCH 149/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 99c9d580..5cee5a91 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -3,12 +3,13 @@ ## 目录 -- [Matrix简介](#Matrix简介) +- [Matrix简介](#jianjie) - [常见误解](#常见误解) - [Matrix详解](#Matrix详解) ****** + ## Matrix简介 **Matrix是一个矩阵,主要功能是坐标映射,数值转换。** From 996f597b167709ce10abee3d8c6c38f1c6aafc2b Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:14:29 +0800 Subject: [PATCH 150/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 5cee5a91..6c4a0d1e 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -4,8 +4,8 @@ ## 目录 - [Matrix简介](#jianjie) - - [常见误解](#常见误解) -- [Matrix详解](#Matrix详解) + - [常见误解](#wujie) +- [Matrix详解](#xiangjie) ****** @@ -37,6 +37,7 @@ $$) > **从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述,会在之后对文章中详述其作用。** + ### 常见误解 **1.认为Matrix最下面的一行的三个参数(MPERSP_0、MPERSP_1、MPERSP_2)没有什么太大的作用,在这里只是为了凑数。** @@ -47,7 +48,9 @@ $$) > **的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。** +****** + ## Matrix详解 Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就看看几种常见的变换原理: From 9dc6a0bb52726327cee37f3fd91a660b5ad1962e Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:18:07 +0800 Subject: [PATCH 151/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 6c4a0d1e..290f2bfb 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -34,26 +34,25 @@ $$)   -> -**从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇范围内,暂不过多叙述,会在之后对文章中详述其作用。** +**从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇讨论范围内,暂不过多叙述,会在之后对文章中详述其作用。** ### 常见误解 **1.认为Matrix最下面的一行的三个参数(MPERSP_0、MPERSP_1、MPERSP_2)没有什么太大的作用,在这里只是为了凑数。** -> **实际上最后一行参数在3D变换中有着至关重要的作用,这一点会在后面中Camera一文中详细介绍。** +实际上最后一行参数在3D变换中有着至关重要的作用,这一点会在后面中Camera一文中详细介绍。 **2.最后一个参数MPERSP_2被解释为scale** -> **的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。** +的确,更改MPERSP_2的值能够达到类似缩放的效果,但这是因为齐次坐标的缘故,并非这个参数的实际功能。 ****** ## Matrix详解 -Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就看看几种常见的变换原理: +Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就看看几种常见变换的原理: 常见的基本变换有4种: 平移(translate)、缩放(scale)、旋转(rotate) 和 错切(skew)。 From ee55346440ecff0548096cd49a83b3a195a2f340 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:33:48 +0800 Subject: [PATCH 152/522] Update --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 903d3ff8..37541cf0 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,13 @@ ## 目录 -- [自定义View](#自定义View) +- [自定义View](#custom_view) - [教程类](#教程类) - [速查表](#速查表) - [混沌水晶](#混沌水晶) - [版权声明](#版权声明) + ## [自定义View](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) * 基础篇 From 21537caa205cd602477f696e45f30789c3e30d2e Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:35:12 +0800 Subject: [PATCH 153/522] Update --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 37541cf0..cf76d7a7 100644 --- a/README.md +++ b/README.md @@ -59,6 +59,7 @@ * [录屏与GIF制作](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/%E5%BD%95%E5%B1%8F%E4%B8%8EGIF%E5%88%B6%E4%BD%9C.md) * [ADB常用命令](https://github.com/GcsSloop/AndroidNote/blob/master/ChaosCrystal/ADB%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4.md) +****** ## 版权声明 @@ -74,6 +75,7 @@ * 保持文章原文,不作修改。 * 明确署名,即至少注明 `作者:GcsSloop` 字样以及文章的原始链接,且不得使用 `rel="nofollow"` 标记。 +* 商业用途请点击最下面图片联系本人。 ## About Me From 73123bf85d85a97bb27a986372415c65736aac94 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:36:30 +0800 Subject: [PATCH 154/522] Update --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index cf76d7a7..c7899b8d 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,8 @@ - [混沌水晶](#混沌水晶) - [版权声明](#版权声明) +****** + ## [自定义View](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) From caf4d115cb5d96f7156c3889fb65ca1d7d39b31f Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 06:39:13 +0800 Subject: [PATCH 155/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 290f2bfb..04cf94d0 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -4,6 +4,7 @@ ## 目录 - [Matrix简介](#jianjie) + - [概述](#gaishu) - [常见误解](#wujie) - [Matrix详解](#xiangjie) @@ -12,6 +13,9 @@ ## Matrix简介 + +### 概述 + **Matrix是一个矩阵,主要功能是坐标映射,数值转换。** 它看起来大概是下面这样: From 7c5ec86e4d28eb20d7edb2df0f744e7a970e88c8 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 07:19:36 +0800 Subject: [PATCH 156/522] Update --- CustomView/Advance/[3]Canvas_Convert.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[3]Canvas_Convert.md b/CustomView/Advance/[3]Canvas_Convert.md index fddd7c62..b3a326c8 100644 --- a/CustomView/Advance/[3]Canvas_Convert.md +++ b/CustomView/Advance/[3]Canvas_Convert.md @@ -295,7 +295,7 @@ Y = sy * x + y mPaint.setColor(Color.BLUE); // 绘制蓝色矩形 canvas.drawRect(rect,mPaint); ``` - +
如你所想,错切也是可叠加的,不过请注意,调用次序不同绘制结果也会不同 ``` java From 4b61c5f7ffc17cb30ac5141eeb16b12348483c3e Mon Sep 17 00:00:00 2001 From: sloop
Date: Tue, 26 Jul 2016 07:22:37 +0800 Subject: [PATCH 157/522] Update --- CustomView/Advance/[3]Canvas_Convert.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CustomView/Advance/[3]Canvas_Convert.md b/CustomView/Advance/[3]Canvas_Convert.md index b3a326c8..0ec2282d 100644 --- a/CustomView/Advance/[3]Canvas_Convert.md +++ b/CustomView/Advance/[3]Canvas_Convert.md @@ -274,6 +274,10 @@ skew这里翻译为错切,错切是特殊类型的线性变换。 public void skew (float sx, float sy) ``` +参数含义:
+float sx:将画布在x方向上倾斜相应的角度,sx倾斜角度的tan值,
+float sy:将画布在y轴方向上倾斜相应的角度,sy为倾斜角度的tan值. + 变换后: ``` X = x + sx * y @@ -290,7 +294,7 @@ Y = sy * x + y mPaint.setColor(Color.BLACK); // 绘制黑色矩形 canvas.drawRect(rect,mPaint); - canvas.skew(1,0); // 错切 + canvas.skew(1,0); // 水平错切 <- 45度 mPaint.setColor(Color.BLUE); // 绘制蓝色矩形 canvas.drawRect(rect,mPaint); @@ -307,8 +311,8 @@ Y = sy * x + y mPaint.setColor(Color.BLACK); // 绘制黑色矩形 canvas.drawRect(rect,mPaint); - canvas.skew(1,0); // 错切 - canvas.skew(0,1); // 错切 + canvas.skew(1,0); // 水平错切 + canvas.skew(0,1); // 垂直错切 mPaint.setColor(Color.BLUE); // 绘制蓝色矩形 canvas.drawRect(rect,mPaint); From d044c3dea2a072c71ead5a1dd52ca9646d422f06 Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 26 Jul 2016 07:24:42 +0800 Subject: [PATCH 158/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 04cf94d0..32ef1141 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -14,8 +14,6 @@ ## Matrix简介 -### 概述 - **Matrix是一个矩阵,主要功能是坐标映射,数值转换。** 它看起来大概是下面这样: From 6d8b372d202c2f7336c63697e3ee184b8b24980b Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 17:56:35 +0800 Subject: [PATCH 159/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 32ef1141..9d8dbc42 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -61,7 +61,7 @@ Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就 由于我们以下大部分的计算都是基于矩阵乘法规则,如果你已经把线性代数还给了老师,请参考一下这里: **[维基百科-矩阵乘法](https://zh.wikipedia.org/wiki/%E7%9F%A9%E9%99%A3%E4%B9%98%E6%B3%95)** -#### a.缩放 +### 1.缩放 以点(10,10)为例,我们将x缩放到原来到0.5倍,y缩放到原来到2倍,我们可以轻易到算出结果:(10x0.5, 10x2) = (5, 20) @@ -90,7 +90,7 @@ y $$) -#### b.错切 +### 2.错切 错切有水平错切(平行X轴)和垂直错切(平行Y轴),或者是两者叠加。 @@ -118,7 +118,7 @@ y \\right ] $$) -#### b.旋转 +### 3.旋转 逆时针旋转 a 度。 @@ -147,7 +147,7 @@ y $$) -### 4.平移变换 +### 4.平移 我们可以看到,在之前的示例中,用的都是 2 x 2 的矩阵,但我们实际的矩阵是 3 x 3 的,这是为什么呢? From 468255a40df46cfc42b9ff2d0e4f46f63cfafa8f Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 20:42:25 +0800 Subject: [PATCH 160/522] Update --- ...0\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" | 4 ++++ 1 file changed, 4 insertions(+) diff --git "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" index 68c18fe9..88835198 100644 --- "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" +++ "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" @@ -1,10 +1,13 @@ # AndroidStudio常用快捷键(Mac) +这里的快捷键是基于OSX个人定制版本的,具体请到 setting -> keymap 设置 + 快捷键 | 作用 ----------------------------|----------------------------------------------- Option + Enter | 自动修正 Command + N | 自动生成代码(Getter Setter) Command + Alt + L | 格式化代码 +Contral + Shift + F | 格式化代码(定制) Command + Alt + T | 把选中的代码放在 try{} 、if{} 、 else{} 里 Command + / | 注释 // Command + Shift + / | 注释 /* */ @@ -18,4 +21,5 @@ Control + Alt + O | 优化导入的包 Ctrl(Command)+ - / + | 折叠/展开代码 Ctrl(Command)+Shift+ - / + | 折叠/展开全部代码 Ctrl(Command)+Shift+. | 折叠/展开当前花括号中的代码 +Command + Y | 快速查看代码实现 From a54445c470266c0127764170d6ff8c88c26299d4 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 20:50:39 +0800 Subject: [PATCH 161/522] Update --- ...270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" index 88835198..685ffa39 100644 --- "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" +++ "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" @@ -22,4 +22,6 @@ Ctrl(Command)+ - / + | 折叠/展开代码 Ctrl(Command)+Shift+ - / + | 折叠/展开全部代码 Ctrl(Command)+Shift+. | 折叠/展开当前花括号中的代码 Command + Y | 快速查看代码实现 +Contral + H | 查看继承关系 +Contral + Alt + H | 查看调用关系 From 22c9f9353d2d3da026c3a648814ebe859114711a Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 20:56:03 +0800 Subject: [PATCH 162/522] Update --- ...270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" | 2 ++ 1 file changed, 2 insertions(+) diff --git "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" index 685ffa39..1a144a28 100644 --- "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" +++ "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" @@ -24,4 +24,6 @@ Ctrl(Command)+Shift+. | 折叠/展开当前花括号中的代码 Command + Y | 快速查看代码实现 Contral + H | 查看继承关系 Contral + Alt + H | 查看调用关系 +Command + [ | 返回上一次查看的位置 +Command + ] | 前进到返回之前查看的位置 From 2d39b66dd7263a07e82605d5c6556bccb4b7c6b6 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 21:08:59 +0800 Subject: [PATCH 163/522] Update --- ...\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" | 1 + 1 file changed, 1 insertion(+) diff --git "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" index 1a144a28..f7bccc3b 100644 --- "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" +++ "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" @@ -26,4 +26,5 @@ Contral + H | 查看继承关系 Contral + Alt + H | 查看调用关系 Command + [ | 返回上一次查看的位置 Command + ] | 前进到返回之前查看的位置 +Command + J | 自动生成代码 From ff281179ff9df774c91049ceea9cfbb6538c5775 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 26 Jul 2016 21:39:37 +0800 Subject: [PATCH 164/522] Update --- ...\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" | 1 + 1 file changed, 1 insertion(+) diff --git "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" index f7bccc3b..61910c5f 100644 --- "a/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" +++ "b/ChaosCrystal/AndroidStudio\345\270\270\347\224\250\345\277\253\346\215\267\351\224\256(Mac).md" @@ -27,4 +27,5 @@ Contral + Alt + H | 查看调用关系 Command + [ | 返回上一次查看的位置 Command + ] | 前进到返回之前查看的位置 Command + J | 自动生成代码 +Command + E | 查看最近打开的文件 From 0230e5b7c9a9311dc8a26313da592d7e680b2c03 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 27 Jul 2016 04:44:59 +0800 Subject: [PATCH 165/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 28 ++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 9d8dbc42..242aea67 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -63,32 +63,46 @@ Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就 ### 1.缩放 -以点(10,10)为例,我们将x缩放到原来到0.5倍,y缩放到原来到2倍,我们可以轻易到算出结果:(10x0.5, 10x2) = (5, 20) + + + + +用矩阵表示:  +图例: ### 2.错切 From 386bfa71874d2d981e05eecfce8b57a58c68b416 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 27 Jul 2016 04:46:49 +0800 Subject: [PATCH 166/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 242aea67..e5610df8 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -92,7 +92,6 @@ MSCALE\\_X & 0 & 0 \\\\ 0 & 0 & 1 \\end{1} \\right ] - . \\left [ \\begin{matrix} x_0 \\\\ @@ -123,7 +122,6 @@ Y Skew\\_Y & 1 \\end{1} \\right ] - . \\left [ \\begin{matrix} x\\\\ From bd65ce6fbb3d91691ae9d951cd40574aabff565b Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 27 Jul 2016 05:31:57 +0800 Subject: [PATCH 167/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index e5610df8..26e090b1 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -101,6 +101,14 @@ y_0 \\\\ \\right ] $$) +> +你可能注意到了,我们坐标多了一个1,这是使用了齐次坐标系的缘故,在数学中我们的点和向量都是这样表示的(x, y),两者看起来一样,计算机无法区分,为此让计算机也可以区分它们,增加了一个标志位,增加之后看起来是这样:
+> +(x, y, 1) - 点
+(x, y, 0) - 向量
+> +另外,齐次坐标具有等比的性质,(2,3,1)、(4,6,2)...(2N,3N,N)表示的均是(2,3)这一个点。(**将MPERSP_2解释为scale这一误解就源于此**)。 + 图例: ### 2.错切 From 4c00613405ef4b25fc34ad302df1d7f65393c58b Mon Sep 17 00:00:00 2001 From: sloopDate: Wed, 27 Jul 2016 19:50:35 +0800 Subject: [PATCH 168/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 26e090b1..6184c147 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -119,21 +119,24 @@ $$) $$ \\left [ \\begin{matrix} -X\\\\ -Y +x\\\\ +y\\\\ +1 \\end{1} \\right ] = \\left [ -\\begin{matrix} -1 & Skew\\_X \\\\ -Skew\\_Y & 1 +\\begin{matrix} + 1 & MSKEW\\_X & 0 \\\\ +MSKEW\\_Y & 1 & 0 \\\\ + 0 & 0 & 1 \\end{1} \\right ] \\left [ \\begin{matrix} -x\\\\ -y +x_0\\\\ +y_0\\\\ +1 \\end{1} \\right ] $$) From 8696ef5f1265df06d81e119ae89bfe8768a043f8 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 27 Jul 2016 23:32:35 +0800 Subject: [PATCH 169/522] Update --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index c7899b8d..c64d1191 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,31 @@ > #### PS:点击分类标题可以查看该分类的详细信息。 + + ## 目录 + + + ****** From 862178879b7865ef0dcd453f538b47ab27f772e7 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 27 Jul 2016 23:37:45 +0800 Subject: [PATCH 170/522] Update --- README.md | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index c64d1191..26721986 100644 --- a/README.md +++ b/README.md @@ -7,30 +7,26 @@ > #### PS:点击分类标题可以查看该分类的详细信息。 ## 目录 - + + - ****** From e0cc6ba517baeeab5c72bf38638dddc53ecffa25 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 27 Jul 2016 23:39:21 +0800 Subject: [PATCH 171/522] Update --- README.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/README.md b/README.md index 26721986..c7899b8d 100644 --- a/README.md +++ b/README.md @@ -6,22 +6,8 @@ > #### PS:点击分类标题可以查看该分类的详细信息。 - - ## 目录 - - - - [自定义View](#custom_view) - [教程类](#教程类) - [速查表](#速查表) From 2a8686ac2ed4605d909941278b64172c755e52d5 Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 28 Jul 2016 04:48:35 +0800 Subject: [PATCH 172/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 6184c147..2285f27e 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -151,20 +151,23 @@ $$ \\begin{matrix} X\\\\ Y +1 \\end{1} \\right ] = \\left [ \\begin{matrix} -cos(a) & -sin(a) \\\\ -sin(a) & cos(a) +cos(a) & -sin(a) & 0 \\\\ +sin(a) & cos(a) & 0 \\\\ + 0 & 0 & 1 \\end{1} \\right ] . \\left [ \\begin{matrix} -x\\\\ -y +x_0\\\\ +y_0\\\\ +1 \\end{1} \\right ] $$) From ebe187df27e6a335c089709efe61a3188d50d7a9 Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 28 Jul 2016 23:54:23 +0800 Subject: [PATCH 173/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 ------ 1 file changed, 6 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 2285f27e..492ae93d 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -175,12 +175,6 @@ $$) ### 4.平移 -我们可以看到,在之前的示例中,用的都是 2 x 2 的矩阵,但我们实际的矩阵是 3 x 3 的,这是为什么呢? - -前面的各种方法我们都是直接 - - - From e644bcf322e6c68ad7d86f0974d35e0ba877fb12 Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 29 Jul 2016 01:39:19 +0800 Subject: [PATCH 174/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 31 ++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 492ae93d..e29a3a5b 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -149,8 +149,8 @@ $$) $$ \\left [ \\begin{matrix} -X\\\\ -Y +x\\\\ +y 1 \\end{1} \\right ] @@ -175,7 +175,32 @@ $$) ### 4.平移 - + From 836eba33e75332478e243c972b9d18cdf80ad3d2 Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 29 Jul 2016 22:50:40 +0800 Subject: [PATCH 175/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index e29a3a5b..c52c5dcd 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -175,20 +175,25 @@ $$) ### 4.平移 + + + + + , 11 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index c52c5dcd..61bbf1d7 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -63,15 +63,10 @@ Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就 ### 1.缩放 - + + + - 用矩阵表示: @@ -87,9 +82,9 @@ y\\\\ = \\left [ \\begin{matrix} -MSCALE\\_X & 0 & 0 \\\\ - 0 & MSCALE\\_Y & 0 \\\\ - 0 & 0 & 1 +k_1 & 0 & 0 \\\\ + 0 & k_2 & 0 \\\\ + 0 & 0 & 1 \\end{1} \\right ] \\left [ From 8bcee327290244c43a1575795ccd8b9d4f9882ac Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 29 Jul 2016 23:57:36 +0800 Subject: [PATCH 177/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 61bbf1d7..37fc856b 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -122,9 +122,9 @@ y\\\\ = \\left [ \\begin{matrix} - 1 & MSKEW\\_X & 0 \\\\ -MSKEW\\_Y & 1 & 0 \\\\ - 0 & 0 & 1 + 1 & k_1 & 0 \\\\ +k_2 & 1 & 0 \\\\ + 0 & 0 & 1 \\end{1} \\right ] \\left [ From d826748f6d9a73ca3f637bf8e0d77b8a505ba37a Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 30 Jul 2016 07:49:28 +0800 Subject: [PATCH 178/522] Update --- ...\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git "a/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" "b/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" index 51ce9556..67f1ff94 100644 --- "a/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" +++ "b/ChaosCrystal/Android\344\270\255dip\343\200\201dp\343\200\201sp\343\200\201pt\345\222\214px.md" @@ -12,7 +12,11 @@ pt | point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业 in | (英寸):长度单位。 mm | (毫米):长度单位。 -单位转换: +## 工具包 + +在 [ViewSupport](https://github.com/GcsSloop/ViewSupport) 支持包中可以找到该工具。 + +## 单位转换代码: ``` java /** * dp、sp 转换为 px 的工具类 From 6de69bbd7cb62691fd849f7476058c98f9f6d64e Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 30 Jul 2016 07:58:07 +0800 Subject: [PATCH 179/522] Update --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index c7899b8d..8dda22b4 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,16 @@ ****** +## 开源库 + +* [FontsManager - 快速替换字体](https://github.com/GcsSloop/FontsManager) +* [ViewSupport - 自定义View工具包](https://github.com/GcsSloop/ViewSupport) +* [Rocker - 自定义摇杆](https://github.com/GcsSloop/Rocker) +* [LeafLoading - 进度条](https://github.com/GcsSloop/LeafLoading) +* [Rotate3dAnimation - 3D旋转动画(修正版)](https://github.com/GcsSloop/Rotate3dAnimation) + +****** + ## 版权声明 * 所有原创文章(未进行特殊标识的均属于原创) 的著作权属于 **GcsSloop**。 From 11ebf3a626c0f7b807cab9a3bcdc96a693732923 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 30 Jul 2016 07:58:51 +0800 Subject: [PATCH 180/522] Update --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8dda22b4..a7e4dc88 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ - [教程类](#教程类) - [速查表](#速查表) - [混沌水晶](#混沌水晶) +- [开源库](#开源库) - [版权声明](#版权声明) ****** From 8e76bf4d5fd2d8dc4c2386c57746c77e1dbac992 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 31 Jul 2016 03:21:14 +0800 Subject: [PATCH 181/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 37fc856b..ab5a912a 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -104,11 +104,17 @@ $$) > 另外,齐次坐标具有等比的性质,(2,3,1)、(4,6,2)...(2N,3N,N)表示的均是(2,3)这一个点。(**将MPERSP_2解释为scale这一误解就源于此**)。 -图例: - ### 2.错切 -错切有水平错切(平行X轴)和垂直错切(平行Y轴),或者是两者叠加。 +错切存在两种特殊错切,水平错切(平行X轴)和垂直错切(平行Y轴)。 + +#### 水平错切 + + + + + +用矩阵表示:  diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index ab5a912a..f0e4aeaf 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -104,6 +104,10 @@ $$) > 另外,齐次坐标具有等比的性质,(2,3,1)、(4,6,2)...(2N,3N,N)表示的均是(2,3)这一个点。(**将MPERSP_2解释为scale这一误解就源于此**)。 +图例: + + + ### 2.错切 错切存在两种特殊错切,水平错切(平行X轴)和垂直错切(平行Y轴)。 From 4575f6259ae2b98e04645e34d264fae52534db5a Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 31 Jul 2016 05:44:38 +0800 Subject: [PATCH 183/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index f0e4aeaf..54d3e02b 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -106,7 +106,7 @@ $$) 图例: - + ### 2.错切 @@ -146,6 +146,10 @@ y_0\\\\ \\right ] $$) +图例: + + + ### 3.旋转 逆时针旋转 a 度。 From 41abc8687fa992d013bc02820375b8b6f071aea7 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 31 Jul 2016 05:47:58 +0800 Subject: [PATCH 184/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 40 ++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 54d3e02b..f90df85c 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -114,7 +114,7 @@ $$) #### 水平错切 - +  @@ -150,6 +150,44 @@ $$)  +#### 垂直错切 + + + + + +用矩阵表示: + + + +图例: + + + ### 3.旋转 逆时针旋转 a 度。 From 29c55dbafc46267c10c0fb1f8d7eb8a0dd0411f0 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 31 Jul 2016 06:03:12 +0800 Subject: [PATCH 185/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index f90df85c..038d1843 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -190,14 +190,16 @@ $$) ### 3.旋转 -逆时针旋转 a 度。 +设一个点 A(x0, 0) ,绕原点旋转 θ 度, 假定点A距离原点距离为 r。 + + , 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 038d1843..4d6d0764 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -190,7 +190,7 @@ $$) ### 3.旋转 -设一个点 A(x0, 0) ,绕原点旋转 θ 度, 假定点A距离原点距离为 r。 +设一个点 A(x0, y0) ,绕原点旋转 θ 度, 假定点A距离原点距离为 r。 From 9682ab19a121722d88a6454b019e2224729c8ace Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 31 Jul 2016 06:47:50 +0800 Subject: [PATCH 187/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 4d6d0764..d5b4ca4a 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -190,9 +190,9 @@ $$) ### 3.旋转 -设一个点 A(x0, y0) ,绕原点旋转 θ 度, 假定点A距离原点距离为 r。 - +设一个点 A(x0, y0) ,绕原点旋转 θ 度, 假定点A距离原点距离为 r, 旋转后为点 B(x, y) 如下: + , 3 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index d5b4ca4a..220dd747 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -190,7 +190,13 @@ $$) ### 3.旋转 -设一个点 A(x0, y0) ,绕原点旋转 θ 度, 假定点A距离原点距离为 r, 旋转后为点 B(x, y) 如下: +假定一个点 A(x0, y0) ,距离原点距离为 r, 与水平轴夹角为 α 度, 绕原点旋转 θ 度, 旋转后为点 B(x, y) 如下: + + + + + +图例:  @@ -206,8 +212,8 @@ y\\\\ = \\left [ \\begin{matrix} -cos(a) & -sin(a) & 0 \\\\ -sin(a) & cos(a) & 0 \\\\ +cos(\\alpha) & -sin(\\alpha) & 0 \\\\ +sin(\\alpha) & cos(\\alpha) & 0 \\\\ 0 & 0 & 1 \\end{1} \\right ] From e1ce1d52baa755fbe44e7b132530848bcee65a9d Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 31 Jul 2016 07:08:37 +0800 Subject: [PATCH 189/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 220dd747..58513168 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -196,9 +196,23 @@ $$)  + += r \\cdot cos \\alpha \\cdot cos \\theta - r \\cdot sin \\alpha \\cdot sin \\theta += x_0 \\cdot cos \\theta - y_0 \\cdot sin \\theta +$$) + + += r \\cdot sin \\alpha \\cdot cos \\theta + r \\cdot cos \\alpha \\cdot sin \\theta += y_0 \\cdot cos \\theta + x_0 \\cdot sin \\theta +$$) + 图例: - + , 6 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 58513168..a7b37733 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -210,9 +210,7 @@ y = r \\cdot sin( \\alpha + \\theta) = y_0 \\cdot cos \\theta + x_0 \\cdot sin \\theta $$) -图例: - - +用矩阵表示:  & -sin(\\alpha) & 0 \\\\ -sin(\\alpha) & cos(\\alpha) & 0 \\\\ - 0 & 0 & 1 +cos(\\theta) & -sin(\\theta) & 0 \\\\ +sin(\\theta) & cos(\\theta) & 0 \\\\ + 0 & 0 & 1 \\end{1} \\right ] . @@ -241,6 +239,12 @@ y_0\\\\ \\right ] $$) +图例: + + + + + ### 4.平移 From c6cb7e51f87448af04343619cef87d4c72fd1340 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 31 Jul 2016 07:22:27 +0800 Subject: [PATCH 191/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 37 +++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index a7b37733..aba8fae8 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -188,6 +188,43 @@ $$)  +#### 复合错切 + +> 水平错切和垂直错切的复合。 + + + + + +用矩阵表示: + + + + ### 3.旋转 假定一个点 A(x0, y0) ,距离原点距离为 r, 与水平轴夹角为 α 度, 绕原点旋转 θ 度, 旋转后为点 B(x, y) 如下: From ebed4ed7c63f222844bfffc945222e991e024689 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 31 Jul 2016 07:23:01 +0800 Subject: [PATCH 192/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index aba8fae8..c816dade 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -224,6 +224,9 @@ y_0\\\\ \\right ] $$) +图例: + + ### 3.旋转 From 502525b31f7e5a9fa30ba57b82c6e30ecf67f1bb Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 1 Aug 2016 02:00:17 +0800 Subject: [PATCH 193/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index c816dade..24c596e6 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -61,7 +61,7 @@ Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就 由于我们以下大部分的计算都是基于矩阵乘法规则,如果你已经把线性代数还给了老师,请参考一下这里: **[维基百科-矩阵乘法](https://zh.wikipedia.org/wiki/%E7%9F%A9%E9%99%A3%E4%B9%98%E6%B3%95)** -### 1.缩放 +### 1.缩放(Scale)  @@ -108,7 +108,7 @@ $$)  -### 2.错切 +### 2.错切(Skew) 错切存在两种特殊错切,水平错切(平行X轴)和垂直错切(平行Y轴)。 @@ -228,7 +228,7 @@ $$)  -### 3.旋转 +### 3.旋转(Rotate) 假定一个点 A(x0, y0) ,距离原点距离为 r, 与水平轴夹角为 α 度, 绕原点旋转 θ 度, 旋转后为点 B(x, y) 如下: @@ -284,14 +284,13 @@ $$)  - - -### 4.平移 +### 4.平移(Translate)   +用矩阵表示:  diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 24c596e6..3623571f 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -319,7 +319,9 @@ y_0\\\\ \\right ] $$) +图例: + From 843bce19b8c67f6ab117f7181b4095f24e7ee111 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 1 Aug 2016 04:27:53 +0800 Subject: [PATCH 195/522] Update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a7e4dc88..a13d2da9 100644 --- a/README.md +++ b/README.md @@ -95,6 +95,6 @@ ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) - +
[▲ 回到顶部](#top) From 9f3a6a6ac23ab7bdebc3e4ad6f1ccfe953bc1a32 Mon Sep 17 00:00:00 2001 From: sloop
Date: Mon, 1 Aug 2016 06:47:35 +0800 Subject: [PATCH 196/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 3623571f..20566092 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -6,7 +6,9 @@ - [Matrix简介](#jianjie) - [概述](#gaishu) - [常见误解](#wujie) -- [Matrix详解](#xiangjie) +- [Matrix基本原理](#jiben) +- [Matrix复合原理](#fuhe) + ****** @@ -51,12 +53,14 @@ $$) ****** - -## Matrix详解 + +## Matrix基本原理 Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就看看几种常见变换的原理: -常见的基本变换有4种: 平移(translate)、缩放(scale)、旋转(rotate) 和 错切(skew)。 +> 我们所用到的变换均属于仿射变换,仿射变换是 线性变换(缩放,旋转,错切) 和 平移变换(平移) 的复合,由于这些概念对于我们作用并不大,此处不过多介绍,有兴趣可自行了解。 + +基本变换有4种: 平移(translate)、缩放(scale)、旋转(rotate) 和 错切(skew)。 由于我们以下大部分的计算都是基于矩阵乘法规则,如果你已经把线性代数还给了老师,请参考一下这里: **[维基百科-矩阵乘法](https://zh.wikipedia.org/wiki/%E7%9F%A9%E9%99%A3%E4%B9%98%E6%B3%95)** @@ -286,6 +290,9 @@ $$) ### 4.平移(Translate) +> +此处也是使用齐次坐标的优点体现之一,实际上前面的三个操作使用 2x2 的矩阵也能满足需求,但是使用 2x2 的矩阵,无法将平移操作加入其中,而将坐标扩展为齐次坐标后,将矩阵扩展为 3x3 就可以将算法统一,四种算法均可以使用矩阵乘法完成。 +   @@ -324,6 +331,8 @@ $$)  + +## Matrix复合原理 From 7a84a9398f4bd83d3ee050cba6f730b03d1df1f1 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 1 Aug 2016 06:50:21 +0800 Subject: [PATCH 197/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 20566092..975661d7 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -8,6 +8,7 @@ - [常见误解](#wujie) - [Matrix基本原理](#jiben) - [Matrix复合原理](#fuhe) +- [Matrix方法表](#fangfa) ****** @@ -338,7 +339,8 @@ $$) -**Matrix方法表** + +## Matrix方法表 方法类别 | 相关API | 摘要 -----------|---------------------------------------------------------|------------------------ From 62f55b5f4b574d501b4d486bff37219290e291b7 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 1 Aug 2016 07:01:24 +0800 Subject: [PATCH 198/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 975661d7..0b608558 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -3,13 +3,18 @@ ## 目录 +- [前言](#qianyan) - [Matrix简介](#jianjie) - - [概述](#gaishu) - - [常见误解](#wujie) - [Matrix基本原理](#jiben) - [Matrix复合原理](#fuhe) - [Matrix方法表](#fangfa) + +## 前言 + +本文内容偏向理论,和 [画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 有重叠的部分,本文会让你更加深入的了解其中的原理。 + +由于Google已经对这一部分已经做了很好的封装,所以跳过本部分对实际开发影响并不会太大,不想深究的粗略浏览即可,下一篇中将会详细讲解Matrix的具体用法和技巧。 ****** @@ -339,7 +344,7 @@ $$) - + ## Matrix方法表 方法类别 | 相关API | 摘要 From ad6b318ca6bff582ae3547d66c7c8974a22bf2cf Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 00:40:48 +0800 Subject: [PATCH 199/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 0b608558..1d175643 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -340,6 +340,10 @@ $$) ## Matrix复合原理 +其实Matrix的多种复合操作都是使用矩阵乘法实现的,从原理上理解很简单,但是,使用矩阵乘法也有其弱点,后面的操作可能会影响到前面到操作,所以在构造Matrix时顺序很重要。 + +我们常用的四大变换操作,每一种操作在Matrix均有三类,前乘(pre),后乘(post)和设置(set),可以参见文末对[Matrix方法表](#fangfa)。 + From 6827fc2df1eda7bbf15c6a5804be21811fe711a8 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 00:58:57 +0800 Subject: [PATCH 200/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 1d175643..42ee83d2 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -342,7 +342,16 @@ $$) 其实Matrix的多种复合操作都是使用矩阵乘法实现的,从原理上理解很简单,但是,使用矩阵乘法也有其弱点,后面的操作可能会影响到前面到操作,所以在构造Matrix时顺序很重要。 -我们常用的四大变换操作,每一种操作在Matrix均有三类,前乘(pre),后乘(post)和设置(set),可以参见文末对[Matrix方法表](#fangfa)。 +我们常用的四大变换操作,每一种操作在Matrix均有三类,前乘(pre),后乘(post)和设置(set),可以参见文末对[Matrix方法表](#fangfa),由于矩阵乘法不满足交换律,所以前乘(pre),后乘(post)和设置(set)的区别还是很大的。 + +### 前乘(pre) + +前乘相当于矩阵的右乘: + + +> 这表示一个矩阵与一个特殊矩阵前乘后构造出结果矩阵。 + + From ca44e99c25f2d20b26f31e010be782fb703d1f7f Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 02:17:27 +0800 Subject: [PATCH 201/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 42ee83d2..246bcc98 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -351,11 +351,16 @@ $$) > 这表示一个矩阵与一个特殊矩阵前乘后构造出结果矩阵。 +### 后乘(post) +前乘相当于矩阵的左乘: + +> 这表示一个矩阵与一个特殊矩阵后乘后构造出结果矩阵。 +### 设置(set) - +设置使用的不是矩阵乘法,而是直接覆盖掉原来的数值,所以,使用设置后可能会导致之前的操作失效。 ## Matrix方法表 From 454f558bbe4313ac060d43cfd1783f4dd5b83d77 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 02:44:03 +0800 Subject: [PATCH 202/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 246bcc98..676a1985 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -46,6 +46,16 @@ $$) **从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇讨论范围内,暂不过多叙述,会在之后对文章中详述其作用。** +### Matrix优点 + +* 作用范围更广,Matrix在自定义View,图片,动画效果上均有运用,相比与之前讲对画布操作应用范围更广。 +* 更加灵活,画布操作是对Matrix的封装,Matrix作为更接近底层的东西,必然要比画布操作更加灵活。 +* 封装很好,Matrix本身对各个方法就做了很好的封装,让开发者可以很方便的操作Matrix。 + +### Matrix缺点 + +* 难以深入理解,很难理解中各个数值的意义,以及操作规律,如果不了解矩阵,也很难理解前乘,后乘。 + ### 常见误解 @@ -360,7 +370,7 @@ $$) ### 设置(set) -设置使用的不是矩阵乘法,而是直接覆盖掉原来的数值,所以,使用设置后可能会导致之前的操作失效。 +设置使用的不是矩阵乘法,而是直接覆盖掉原来的数值,所以,**使用设置可能会导致之前的操作失效**。 ## Matrix方法表 From a24d7b8068128aaa8dbed7c919e22d38c18797b5 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 03:24:34 +0800 Subject: [PATCH 203/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 29 +++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 676a1985..0cc6a36f 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -372,6 +372,35 @@ $$) 设置使用的不是矩阵乘法,而是直接覆盖掉原来的数值,所以,**使用设置可能会导致之前的操作失效**。 +## 组合 + +我们使用Matrix最终目的就是让视图显示为我们想要的状态,为此我们可能需要多种操作结合使用。 + +我发现很多讲解Matrix的文章喜欢用绕某一个点缩放(旋转)的示例来讲解,如下: + + +> + 那么我们如果想让它基于图片中心缩放,应该该怎么办?要用到组合变换, + 1)先将图片由中心平移到原点,这是应用变换 T + 2)对图应用缩放变换 S + 3)再将图片平移回到中心,应用变换 -T + +> + 对应代码: + matrix.postScale(0.5f, 0.5f); + matrix.preTranslate(-pivotX, -pivotY); + matrix.postTranslate(pivotX, pivotY); +> + PS: 此段文字引用自其它文章。 + +首先,**这个思路是没有任何问题的,也是实现绕某一点操作的核心原理**,但这可能会对一部分小白造成误解,认为只能这样实现,然而查看一下Matrix的方法表就能知道四大操作都可以指定中心点,所以,上面的三行代码用一行就能完成: + +```java +matrix.postScale(0.5f, 0.5f, pivotX, pivotY); +``` + +**组合操作构造Matrix时,个人建议尽量全部使用后乘或者全部使用前乘,这样操作顺序容易确定,出现问题也比较容易排查。
当然,由于矩阵乘法不满足交换律,前乘和后乘的结果是不同的,使用时应结合具体情景分析使用。** + ## Matrix方法表 From ffc68702528d188bac52e8de4a3412924f3bc3ce Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 2 Aug 2016 03:29:22 +0800 Subject: [PATCH 204/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 0cc6a36f..05a014ef 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -404,6 +404,8 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); ## Matrix方法表 +这个方法表,暂时放到这里让大家看看,方法的使用讲解放在下一篇文章中。 + 方法类别 | 相关API | 摘要 -----------|---------------------------------------------------------|------------------------ 基本方法 | equals hashCode toString toShortString | 比较、 获取哈希值、 转换为字符串 From 60a9b330cf4bc743b2b909d81a4683f8db137eab Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 03:33:27 +0800 Subject: [PATCH 205/522] Update --- Course/HowToUsePlantUMLInAS.md | 2 +- Course/ReleaseLibraryByJitPack.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Course/HowToUsePlantUMLInAS.md b/Course/HowToUsePlantUMLInAS.md index ea1ef7de..baa7809a 100644 --- a/Course/HowToUsePlantUMLInAS.md +++ b/Course/HowToUsePlantUMLInAS.md @@ -49,7 +49,7 @@ ## About Me ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) - +
diff --git a/Course/ReleaseLibraryByJitPack.md b/Course/ReleaseLibraryByJitPack.md index 18b3dbf6..a5aae506 100644 --- a/Course/ReleaseLibraryByJitPack.md +++ b/Course/ReleaseLibraryByJitPack.md @@ -149,7 +149,7 @@ buildscript { ### 作者微博: @GcsSloop -
+
From 4a4791b283efa576079a2e49192c0f46838c4e82 Mon Sep 17 00:00:00 2001 From: sloop
Date: Tue, 2 Aug 2016 03:35:04 +0800 Subject: [PATCH 206/522] Update --- CustomView/Base/[1]CoordinateSystem.md | 2 +- CustomView/Base/[2]AngleAndRadian.md | 2 +- CustomView/Base/[3]Color.md | 2 +- CustomView/README.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CustomView/Base/[1]CoordinateSystem.md b/CustomView/Base/[1]CoordinateSystem.md index e4b1f9ab..00ac0ba8 100644 --- a/CustomView/Base/[1]CoordinateSystem.md +++ b/CustomView/Base/[1]CoordinateSystem.md @@ -63,5 +63,5 @@ ### 作者微博: @GcsSloop - +
diff --git a/CustomView/Base/[2]AngleAndRadian.md b/CustomView/Base/[2]AngleAndRadian.md index e262ee81..5b4ee7db 100644 --- a/CustomView/Base/[2]AngleAndRadian.md +++ b/CustomView/Base/[2]AngleAndRadian.md @@ -75,7 +75,7 @@ C = 2πr; ## About Me ### 作者微博: @GcsSloop -
+
diff --git a/CustomView/Base/[3]Color.md b/CustomView/Base/[3]Color.md index f5b0b7c1..aeb8a6f4 100644 --- a/CustomView/Base/[3]Color.md +++ b/CustomView/Base/[3]Color.md @@ -154,6 +154,6 @@ XOR | [Sa + Da - 2 * Sa * Da, Sc * (1 - Da) + (1 - Sa) * Dc] ## About Me ### 作者微博: @GcsSloop -
+
diff --git a/CustomView/README.md b/CustomView/README.md index 485bd509..9b611047 100644 --- a/CustomView/README.md +++ b/CustomView/README.md @@ -36,4 +36,4 @@ ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -
+
From bb18cc0b9d5f022a2a4eeb4fca9f7825b92ef73a Mon Sep 17 00:00:00 2001 From: sloop
Date: Tue, 2 Aug 2016 03:38:23 +0800 Subject: [PATCH 207/522] Update --- CustomView/Advance/[1]CustomViewProcess.md | 2 +- CustomView/Advance/[2]Canvas_BasicGraphics.md | 2 +- CustomView/Advance/[3]Canvas_Convert.md | 2 +- CustomView/Advance/[4]Canvas_PictureText.md | 2 +- CustomView/Advance/[5]Path_Basic.md | 2 +- CustomView/Advance/[6]Path_Bezier.md | 2 +- CustomView/Advance/[7]Path_Over.md | 2 +- CustomView/Advance/[8]Path_Play.md | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/CustomView/Advance/[1]CustomViewProcess.md b/CustomView/Advance/[1]CustomViewProcess.md index c4fe7973..f6687bb5 100644 --- a/CustomView/Advance/[1]CustomViewProcess.md +++ b/CustomView/Advance/[1]CustomViewProcess.md @@ -228,7 +228,7 @@ ViewGroup | ViewGroup xxLayout等 | 包含子View ### 作者微博: @GcsSloop - +
## 参考资料: diff --git a/CustomView/Advance/[2]Canvas_BasicGraphics.md b/CustomView/Advance/[2]Canvas_BasicGraphics.md index 773c4497..9fafb163 100644 --- a/CustomView/Advance/[2]Canvas_BasicGraphics.md +++ b/CustomView/Advance/[2]Canvas_BasicGraphics.md @@ -530,7 +530,7 @@ public class PieView extends View { ## About Me ### 作者微博: @GcsSloop -
+
## 参考资料: diff --git a/CustomView/Advance/[3]Canvas_Convert.md b/CustomView/Advance/[3]Canvas_Convert.md index 0ec2282d..b462e3e2 100644 --- a/CustomView/Advance/[3]Canvas_Convert.md +++ b/CustomView/Advance/[3]Canvas_Convert.md @@ -440,7 +440,7 @@ public int saveLayerAlpha (float left, float top, float right, float bottom, int ## About Me ### 作者微博: @GcsSloop -
+
****** ## 四.参考资料 diff --git a/CustomView/Advance/[4]Canvas_PictureText.md b/CustomView/Advance/[4]Canvas_PictureText.md index 94fecc07..ad2e637b 100644 --- a/CustomView/Advance/[4]Canvas_PictureText.md +++ b/CustomView/Advance/[4]Canvas_PictureText.md @@ -495,7 +495,7 @@ public void drawPosText (char[] text, int index, int count, float[] pos, Paint p ### 作者微博: @GcsSloop -
+
## 参考资料 diff --git a/CustomView/Advance/[5]Path_Basic.md b/CustomView/Advance/[5]Path_Basic.md index 69a63c18..d3641a42 100644 --- a/CustomView/Advance/[5]Path_Basic.md +++ b/CustomView/Advance/[5]Path_Basic.md @@ -572,7 +572,7 @@ dst状态 | 效果 ### 作者微博: @GcsSloop -
+
## 参考资料 diff --git a/CustomView/Advance/[6]Path_Bezier.md b/CustomView/Advance/[6]Path_Bezier.md index a202261b..26f38ea8 100644 --- a/CustomView/Advance/[6]Path_Bezier.md +++ b/CustomView/Advance/[6]Path_Bezier.md @@ -574,7 +574,7 @@ public class Bezier3 extends View { ### 作者微博: @GcsSloop -
+
## 参考资料 [Path](http://developer.android.com/reference/android/graphics/Path.html)
diff --git a/CustomView/Advance/[7]Path_Over.md b/CustomView/Advance/[7]Path_Over.md index 58ee9a6e..be9818bc 100644 --- a/CustomView/Advance/[7]Path_Over.md +++ b/CustomView/Advance/[7]Path_Over.md @@ -394,7 +394,7 @@ Path中常用的方法到此已经结束,希望能够帮助大家加深对Path ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -+
## 参考资料 [Path](https://developer.android.com/reference/android/graphics/Path.html)
diff --git a/CustomView/Advance/[8]Path_Play.md b/CustomView/Advance/[8]Path_Play.md index c2a307fe..181158c6 100644 --- a/CustomView/Advance/[8]Path_Play.md +++ b/CustomView/Advance/[8]Path_Play.md @@ -536,7 +536,7 @@ Path 和 SVG 结合通常能诞生出一些奇妙的东西,如下: ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) -+
## 参考资料 [PathMeasure](https://developer.android.com/reference/android/graphics/PathMeasure.html)
From 0bcc71aa7b8680bc116193bfd3fa1bae895bff41 Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 2 Aug 2016 03:40:57 +0800 Subject: [PATCH 208/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 05a014ef..82e66990 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,5 +1,8 @@ # Matrix基础篇 +### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) +### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) + ## 目录 @@ -417,17 +420,19 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); 特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... +## 总结 +## About Me +### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) + +## 参考资料 - - - - - - - - +[]()
+[]()
+[]()
+[]()
+[]()
From 9eb7caa17e640e7581f525bda91c69c24befbbfd Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 2 Aug 2016 03:45:46 +0800 Subject: [PATCH 209/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 82e66990..213b612f 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -11,6 +11,9 @@ - [Matrix基本原理](#jiben) - [Matrix复合原理](#fuhe) - [Matrix方法表](#fangfa) +- [总结](#zongjie) +- [关于作者](#about) +- [参考资料](#ziliao) ## 前言 @@ -420,15 +423,18 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); 特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... + ## 总结 + ## About Me ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) + ## 参考资料 []()
From 8bace16878483a34e76d917e5c6248e982b433e4 Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 2 Aug 2016 03:53:39 +0800 Subject: [PATCH 210/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 213b612f..3e935e2d 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -437,8 +437,12 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); ## 参考资料 -[]()
-[]()
-[]()
-[]()
+[Matrix](https://developer.android.com/reference/android/graphics/Matrix.html)
+[Android中图像变换Matrix的原理、代码验证和应用](http://biandroid.iteye.com/blog/1399462)
+[Android中关于矩阵(Matrix)前乘后乘的一些认识](http://blog.csdn.net/linmiansheng/article/details/18820599)
+[维基百科-仿射变换](https://zh.wikipedia.org/wiki/%E4%BB%BF%E5%B0%84%E5%8F%98%E6%8D%A2)
+[维基百科-齐次坐标](https://zh.wikipedia.org/wiki/%E9%BD%90%E6%AC%A1%E5%9D%90%E6%A0%87)
+[维基百科-线性映射](https://zh.wikipedia.org/wiki/%E7%BA%BF%E6%80%A7%E6%98%A0%E5%B0%84)
+[齐次坐标系入门级思考](https://oncemore2020.github.io/blog/homogeneous/)
+[仿射变换与齐次坐标](https://guangchun.wordpress.com/2011/10/12/affineandhomogeneous/)
[]()
From bf9d21073ee20a83712412386f54f5747cc6e0da Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 2 Aug 2016 04:00:14 +0800 Subject: [PATCH 211/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index 3e935e2d..dea05f9f 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -426,6 +426,10 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); ## 总结 +对于Matrix重在理解,理解了其中的原理之后用起来将会更加得心应手。 + +**学完了本篇之后,推荐配合鸿洋大大的视频课程 [ +打造个性的图片预览与多点触控](http://www.imooc.com/learn/239) 食用,定然能够让你对Matrix对理解更上一层楼。** ## About Me From 53b8628b1ab9f5bfedfb6df5a67d34d231685f78 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 06:30:44 +0800 Subject: [PATCH 212/522] Update --- CustomView/Advance/[9]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[9]Matrix_Basic.md index dea05f9f..d63dba52 100644 --- a/CustomView/Advance/[9]Matrix_Basic.md +++ b/CustomView/Advance/[9]Matrix_Basic.md @@ -1,4 +1,4 @@ -# Matrix基础篇 +# Matrix原理 ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) ### [【本系列相关文章】](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) From 604b20954a91746e91d278ba78d75b8e9cabd5ef Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 06:33:02 +0800 Subject: [PATCH 213/522] Update --- CustomView/Advance/[10]Matrix_Method.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 CustomView/Advance/[10]Matrix_Method.md diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md new file mode 100644 index 00000000..d2fbecc8 --- /dev/null +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -0,0 +1 @@ +# Matrix方法 From 80b4fabc76cee75fe6466ecb648ffef28b372145 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 06:35:30 +0800 Subject: [PATCH 214/522] Update --- .../{[1]CoordinateSystem.md => [01]CoordinateSystem.md} | 0 .../Base/{[2]AngleAndRadian.md => [02]AngleAndRadian.md} | 0 CustomView/Base/{[3]Color.md => [03]Color.md} | 0 CustomView/README.md | 6 +++--- 4 files changed, 3 insertions(+), 3 deletions(-) rename CustomView/Base/{[1]CoordinateSystem.md => [01]CoordinateSystem.md} (100%) rename CustomView/Base/{[2]AngleAndRadian.md => [02]AngleAndRadian.md} (100%) rename CustomView/Base/{[3]Color.md => [03]Color.md} (100%) diff --git a/CustomView/Base/[1]CoordinateSystem.md b/CustomView/Base/[01]CoordinateSystem.md similarity index 100% rename from CustomView/Base/[1]CoordinateSystem.md rename to CustomView/Base/[01]CoordinateSystem.md diff --git a/CustomView/Base/[2]AngleAndRadian.md b/CustomView/Base/[02]AngleAndRadian.md similarity index 100% rename from CustomView/Base/[2]AngleAndRadian.md rename to CustomView/Base/[02]AngleAndRadian.md diff --git a/CustomView/Base/[3]Color.md b/CustomView/Base/[03]Color.md similarity index 100% rename from CustomView/Base/[3]Color.md rename to CustomView/Base/[03]Color.md diff --git a/CustomView/README.md b/CustomView/README.md index 9b611047..0f2e00b4 100644 --- a/CustomView/README.md +++ b/CustomView/README.md @@ -5,9 +5,9 @@ ## 基础篇 ******* From 7b6f6f4e6a2f4cd1269c35381ce014ebd1b66245 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 06:41:14 +0800 Subject: [PATCH 215/522] Update --- ...omViewProcess.md => [01]CustomViewProcess.md} | 0 ...icGraphics.md => [02]Canvas_BasicGraphics.md} | 0 ...3]Canvas_Convert.md => [03]Canvas_Convert.md} | 0 ..._PictureText.md => [04]Canvas_PictureText.md} | 0 .../{[5]Path_Basic.md => [05]Path_Basic.md} | 0 .../{[6]Path_Bezier.md => [06]Path_Bezier.md} | 0 .../{[7]Path_Over.md => [07]Path_Over.md} | 0 .../{[8]Path_Play.md => [08]Path_Play.md} | 0 .../{[9]Matrix_Basic.md => [09]Matrix_Basic.md} | 0 CustomView/README.md | 16 ++++++++-------- 10 files changed, 8 insertions(+), 8 deletions(-) rename CustomView/Advance/{[1]CustomViewProcess.md => [01]CustomViewProcess.md} (100%) rename CustomView/Advance/{[2]Canvas_BasicGraphics.md => [02]Canvas_BasicGraphics.md} (100%) rename CustomView/Advance/{[3]Canvas_Convert.md => [03]Canvas_Convert.md} (100%) rename CustomView/Advance/{[4]Canvas_PictureText.md => [04]Canvas_PictureText.md} (100%) rename CustomView/Advance/{[5]Path_Basic.md => [05]Path_Basic.md} (100%) rename CustomView/Advance/{[6]Path_Bezier.md => [06]Path_Bezier.md} (100%) rename CustomView/Advance/{[7]Path_Over.md => [07]Path_Over.md} (100%) rename CustomView/Advance/{[8]Path_Play.md => [08]Path_Play.md} (100%) rename CustomView/Advance/{[9]Matrix_Basic.md => [09]Matrix_Basic.md} (100%) diff --git a/CustomView/Advance/[1]CustomViewProcess.md b/CustomView/Advance/[01]CustomViewProcess.md similarity index 100% rename from CustomView/Advance/[1]CustomViewProcess.md rename to CustomView/Advance/[01]CustomViewProcess.md diff --git a/CustomView/Advance/[2]Canvas_BasicGraphics.md b/CustomView/Advance/[02]Canvas_BasicGraphics.md similarity index 100% rename from CustomView/Advance/[2]Canvas_BasicGraphics.md rename to CustomView/Advance/[02]Canvas_BasicGraphics.md diff --git a/CustomView/Advance/[3]Canvas_Convert.md b/CustomView/Advance/[03]Canvas_Convert.md similarity index 100% rename from CustomView/Advance/[3]Canvas_Convert.md rename to CustomView/Advance/[03]Canvas_Convert.md diff --git a/CustomView/Advance/[4]Canvas_PictureText.md b/CustomView/Advance/[04]Canvas_PictureText.md similarity index 100% rename from CustomView/Advance/[4]Canvas_PictureText.md rename to CustomView/Advance/[04]Canvas_PictureText.md diff --git a/CustomView/Advance/[5]Path_Basic.md b/CustomView/Advance/[05]Path_Basic.md similarity index 100% rename from CustomView/Advance/[5]Path_Basic.md rename to CustomView/Advance/[05]Path_Basic.md diff --git a/CustomView/Advance/[6]Path_Bezier.md b/CustomView/Advance/[06]Path_Bezier.md similarity index 100% rename from CustomView/Advance/[6]Path_Bezier.md rename to CustomView/Advance/[06]Path_Bezier.md diff --git a/CustomView/Advance/[7]Path_Over.md b/CustomView/Advance/[07]Path_Over.md similarity index 100% rename from CustomView/Advance/[7]Path_Over.md rename to CustomView/Advance/[07]Path_Over.md diff --git a/CustomView/Advance/[8]Path_Play.md b/CustomView/Advance/[08]Path_Play.md similarity index 100% rename from CustomView/Advance/[8]Path_Play.md rename to CustomView/Advance/[08]Path_Play.md diff --git a/CustomView/Advance/[9]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md similarity index 100% rename from CustomView/Advance/[9]Matrix_Basic.md rename to CustomView/Advance/[09]Matrix_Basic.md diff --git a/CustomView/README.md b/CustomView/README.md index 0f2e00b4..94bc98bc 100644 --- a/CustomView/README.md +++ b/CustomView/README.md @@ -14,24 +14,24 @@ ## 进阶篇 ******* ******* ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) From e58052477ab24a33c14dab91ee776ba95b74f8c1 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 06:42:51 +0800 Subject: [PATCH 216/522] Update --- README.md | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index a13d2da9..5bfe40f2 100644 --- a/README.md +++ b/README.md @@ -21,18 +21,18 @@ ## [自定义View](https://github.com/GcsSloop/AndroidNote/tree/master/CustomView/README.md) * 基础篇 - * [安卓自定义View基础 - 坐标系](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B1%5DCoordinateSystem.md) - * [安卓自定义View基础 - 角度弧度](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B2%5DAngleAndRadian.md) - * [安卓自定义View基础 - 颜色](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B3%5DColor.md) + * [安卓自定义View基础 - 坐标系](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B01%5DCoordinateSystem.md) + * [安卓自定义View基础 - 角度弧度](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B02%5DAngleAndRadian.md) + * [安卓自定义View基础 - 颜色](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Base/%5B03%5DColor.md) * 进阶篇 - * [安卓自定义View进阶 - 分类和流程](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B1%5DCustomViewProcess.md) - * [安卓自定义View进阶 - 绘制基本图形](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B2%5DCanvas_BasicGraphics.md) - * [安卓自定义View进阶 - 画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) - * [安卓自定义View进阶 - 图片文字](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B4%5DCanvas_PictureText.md) - * [安卓自定义View进阶 - Path基本操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B5%5DPath_Basic.md) - * [安卓自定义View进阶 - 贝塞尔曲线](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B6%5DPath_Bezier.md) - * [安卓自定义View进阶 - Path完结篇(伪)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B7%5DPath_Over.md) - * [安卓自定义View进阶 - Path玩出花样(PathMeasure)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B8%5DPath_Play.md) + * [安卓自定义View进阶 - 分类和流程](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B01%5DCustomViewProcess.md) + * [安卓自定义View进阶 - 绘制基本图形](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B02%5DCanvas_BasicGraphics.md) + * [安卓自定义View进阶 - 画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B03%5DCanvas_Convert.md) + * [安卓自定义View进阶 - 图片文字](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B04%5DCanvas_PictureText.md) + * [安卓自定义View进阶 - Path基本操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B05%5DPath_Basic.md) + * [安卓自定义View进阶 - 贝塞尔曲线](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B06%5DPath_Bezier.md) + * [安卓自定义View进阶 - Path完结篇(伪)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B07%5DPath_Over.md) + * [安卓自定义View进阶 - Path玩出花样(PathMeasure)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B08%5DPath_Play.md) ****** From 3375c6a01aea850929371117f85ca2831e835205 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 06:54:02 +0800 Subject: [PATCH 217/522] Update --- .gitignore | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 .gitignore diff --git a/.gitignore b/.gitignore deleted file mode 100644 index ccf2efe0..00000000 --- a/.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -# Built application files -*.apk -*.ap_ - -# Files for the Dalvik VM -*.dex - -# Java class files -*.class - -# Generated files -bin/ -gen/ - -# Gradle files -.gradle/ -build/ -/*/build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files -*.log From 2c2df4ab4bf18bc132d9796025a5d1a325291737 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 06:59:50 +0800 Subject: [PATCH 218/522] Update --- CustomView/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CustomView/README.md b/CustomView/README.md index 94bc98bc..e08eff71 100644 --- a/CustomView/README.md +++ b/CustomView/README.md @@ -32,6 +32,7 @@ ### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) From e83c274012dd50bc42a680575ea3f7616c1ab5c7 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 07:01:17 +0800 Subject: [PATCH 219/522] Update --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 5bfe40f2..607fce1f 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,7 @@ * [安卓自定义View进阶 - 贝塞尔曲线](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B06%5DPath_Bezier.md) * [安卓自定义View进阶 - Path完结篇(伪)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B07%5DPath_Over.md) * [安卓自定义View进阶 - Path玩出花样(PathMeasure)](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B08%5DPath_Play.md) + * [安卓自定义View进阶 - Matrix原理](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B09%5DMatrix_Basic.md) ****** From 5da6d0d8ae721a1466ea8462d3de8f1e0b041482 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 07:10:18 +0800 Subject: [PATCH 220/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index d63dba52..405b09ab 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -20,6 +20,9 @@ 本文内容偏向理论,和 [画布操作](https://github.com/GcsSloop/AndroidNote/blob/master/CustomView/Advance/%5B3%5DCanvas_Convert.md) 有重叠的部分,本文会让你更加深入的了解其中的原理。 +本篇的主角Matrix,是一个一直在后台默默工作的劳动模范,虽然我们所有看到View背后都有着Matrix的功劳,但我们却很少见到它,本篇我们就看看它是何方神圣吧。 + +> 由于Google已经对这一部分已经做了很好的封装,所以跳过本部分对实际开发影响并不会太大,不想深究的粗略浏览即可,下一篇中将会详细讲解Matrix的具体用法和技巧。 ****** From b1d57a122256b8b3cc346e75980308a4cf45f4a3 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 07:18:42 +0800 Subject: [PATCH 221/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index 405b09ab..af63de01 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -55,6 +55,21 @@ $$) **从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇讨论范围内,暂不过多叙述,会在之后对文章中详述其作用。** +**Matrix作用就是坐标映射,那么为什么需要Matrix呢? 举一个简单的例子:** + +我的的手机屏幕作为物理设备,其物理坐标系是从左上角开始的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系。 + +以下图为例,我们的内容区和屏幕坐标系还相差一个通知栏加一个标题栏的距离,所以两者是不重合的,我们在内容区的坐标系中的内容最终绘制的时候肯定要转换为实际的物理坐标系来绘制,Matrix在此处的作用就是转换这些数值。 + +> +假设通知栏高度为20像素,导航栏高度为40像素,那么我们在内容区的(0,0)位置绘制一个点,最终就要转化为在实际坐标系中的(0,60)位置绘制一个点。 + + + +以上是仅作为一个简单的示例,实际上不论2D还是3D,我们要将图形显示在屏幕上,都离不开Matrix,所以说Matrix是一个在背后辛勤工作的劳模。 + + + ### Matrix优点 * 作用范围更广,Matrix在自定义View,图片,动画效果上均有运用,相比与之前讲对画布操作应用范围更广。 From 0d2e4c296864cae354d2ed45487df50b8fa50699 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 07:21:18 +0800 Subject: [PATCH 222/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index af63de01..690df369 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -70,14 +70,12 @@ $$) -### Matrix优点 +### Matrix特点 -* 作用范围更广,Matrix在自定义View,图片,动画效果上均有运用,相比与之前讲对画布操作应用范围更广。 +* 作用范围更广,Matrix在View,图片,动画效果等各个方面均有运用,相比与之前讲解等画布操作应用范围更广。 * 更加灵活,画布操作是对Matrix的封装,Matrix作为更接近底层的东西,必然要比画布操作更加灵活。 * 封装很好,Matrix本身对各个方法就做了很好的封装,让开发者可以很方便的操作Matrix。 - -### Matrix缺点 - +* * 难以深入理解,很难理解中各个数值的意义,以及操作规律,如果不了解矩阵,也很难理解前乘,后乘。 From 65327773cf0438a5b167d31ecddcc416f0f1042a Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 07:40:52 +0800 Subject: [PATCH 223/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index 690df369..d247b30d 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -48,13 +48,6 @@ MPERSP\\_0 & MPERSP\\_1 & MPERSP\\_2 \\right ] $$) -下面我们看一下2D画布中常用的四种操作(translate, scale, rotate, skew)都是由哪些参数控制的。 - - - - -**从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇讨论范围内,暂不过多叙述,会在之后对文章中详述其作用。** - **Matrix作用就是坐标映射,那么为什么需要Matrix呢? 举一个简单的例子:** 我的的手机屏幕作为物理设备,其物理坐标系是从左上角开始的,但我们在开发的时候通常不会使用这一坐标系,而是使用内容区的坐标系。 @@ -100,6 +93,13 @@ Matrix 是一个矩阵,最根本的作用就是坐标转换,下面我们就 基本变换有4种: 平移(translate)、缩放(scale)、旋转(rotate) 和 错切(skew)。 +下面我们看一下四种变换都是由哪些参数控制的。 + + + + +**从上图可以看到最后三个参数是控制透视的,这三个参数主要在3D效果中运用,通常为(0, 0, 1),不在本篇讨论范围内,暂不过多叙述,会在之后对文章中详述其作用。** + 由于我们以下大部分的计算都是基于矩阵乘法规则,如果你已经把线性代数还给了老师,请参考一下这里: **[维基百科-矩阵乘法](https://zh.wikipedia.org/wiki/%E7%9F%A9%E9%99%A3%E4%B9%98%E6%B3%95)** From 9a16417d771005506d81269559e9dfe40a58b8ee Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 10:16:05 +0800 Subject: [PATCH 224/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 101 +++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index d247b30d..7527fda1 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -423,6 +423,107 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); **组合操作构造Matrix时,个人建议尽量全部使用后乘或者全部使用前乘,这样操作顺序容易确定,出现问题也比较容易排查。
当然,由于矩阵乘法不满足交换律,前乘和后乘的结果是不同的,使用时应结合具体情景分析使用。** +### Pre与Post的区别 + +主要区别其实就是矩阵的乘法顺序不同,pre相当于矩阵的右乘,而post相当于矩阵的左乘,在图像处理中,越靠近右边的矩阵越先执行,所以pre操作会先执行,而post操作会后执行。 + +**假设我们需要先缩放再平移:** + +pre: + +``` +Matrix m = new Matrix(); +m.reset(); +m.preTranslate(tx, ty); //使用pre,越靠后越先执行。 +m.preScale(sx, sy); +``` + +用矩阵表示: + + + +post: + +``` +Matrix m = new Matrix(); +m.reset(); +m.postScale(sx, sy); //使用post,越靠前越先执行。 +m.postTranslate(tx, ty); +``` + +用矩阵表示: + + + +**由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致两次运算结果不同。** + + ## Matrix方法表 From 561b9d6abad8412aa9990938a09cbfbfa6f085eb Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 2 Aug 2016 10:28:40 +0800 Subject: [PATCH 225/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 71 ++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 4 deletions(-) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index 7527fda1..af0b1576 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -427,9 +427,14 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); 主要区别其实就是矩阵的乘法顺序不同,pre相当于矩阵的右乘,而post相当于矩阵的左乘,在图像处理中,越靠近右边的矩阵越先执行,所以pre操作会先执行,而post操作会后执行。 -**假设我们需要先缩放再平移:** -pre: + +**假设我们需要先缩放再平移,下面我们用不同对方式来构造这一个矩阵:** + +> +**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致两次运算结果不同。** + +#### 1.pre: ``` Matrix m = new Matrix(); @@ -475,7 +480,7 @@ sx & 0 & 0\\\\ \\right ] $$) -post: +#### 2.post: ``` Matrix m = new Matrix(); @@ -521,7 +526,65 @@ sx & 0 & 0\\\\ \\right ] $$) -**由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致两次运算结果不同。** +#### 3.混合: + +``` +Matrix m = new Matrix(); +m.reset(); +m.preScale(sx, sy); +m.postTranslate(tx, ty); +``` + +或: + +``` +Matrix m = new Matrix(); +m.reset(); +m.postTranslate(tx, ty); +m.preScale(sx, sy); +``` + +> 由于此处只有两步操作,且指定了先后,所以代码上交换并不会影响结果。 + +用矩阵表示: + + + + +**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致两次运算结果不同。** From cb6498cd4236e9b4af210677195e9e4067c632b3 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 10:36:00 +0800 Subject: [PATCH 226/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index af0b1576..13c2d061 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -432,11 +432,13 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); **假设我们需要先缩放再平移,下面我们用不同对方式来构造这一个矩阵:** > -**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致两次运算结果不同。** +**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致运算结果不同。
** +**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致运算结果不同。
** +**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致运算结果不同。
** -#### 1.pre: +#### 1.仅用pre: -``` +``` java Matrix m = new Matrix(); m.reset(); m.preTranslate(tx, ty); //使用pre,越靠后越先执行。 @@ -480,9 +482,9 @@ sx & 0 & 0\\\\ \\right ] $$) -#### 2.post: +#### 2.仅用post: -``` +``` java Matrix m = new Matrix(); m.reset(); m.postScale(sx, sy); //使用post,越靠前越先执行。 @@ -528,7 +530,7 @@ $$) #### 3.混合: -``` +``` java Matrix m = new Matrix(); m.reset(); m.preScale(sx, sy); @@ -537,7 +539,7 @@ m.postTranslate(tx, ty); 或: -``` +``` java Matrix m = new Matrix(); m.reset(); m.postTranslate(tx, ty); From ad91d9d6474eaa04d93037a7c89fb3b1656d814f Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 2 Aug 2016 19:48:00 +0800 Subject: [PATCH 227/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index 13c2d061..c7caa7f3 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -431,10 +431,12 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); **假设我们需要先缩放再平移,下面我们用不同对方式来构造这一个矩阵:** -> -**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致运算结果不同。
** -**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致运算结果不同。
** -**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致运算结果不同。
** + +> +**注意: +* 1.由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致运算结果不同。 +* 2.请构造顺序,顺序是会影响结果的。** + #### 1.仅用pre: @@ -586,7 +588,7 @@ sx & 0 & 0\\\\ $$) -**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致两次运算结果不同。** +**注意: 由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则导致运算结果不同。** From 0a0b7014667eb2048c14a39c67604f5e7d552134 Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 2 Aug 2016 20:41:50 +0800 Subject: [PATCH 228/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index c7caa7f3..e430f99c 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -433,9 +433,9 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); > -**注意: +注意: * 1.由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致运算结果不同。 -* 2.请构造顺序,顺序是会影响结果的。** +* 2.请构造顺序,顺序是会影响结果的。 #### 1.仅用pre: From c34b0e635343e5c61c8b4c806b37571686b71be5 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 21:30:28 +0800 Subject: [PATCH 229/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index e430f99c..45c8ffc6 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -425,8 +425,25 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); ### Pre与Post的区别 -主要区别其实就是矩阵的乘法顺序不同,pre相当于矩阵的右乘,而post相当于矩阵的左乘,在图像处理中,越靠近右边的矩阵越先执行,所以pre操作会先执行,而post操作会后执行。 +主要区别其实就是矩阵的乘法顺序不同,pre相当于矩阵的右乘,而post相当于矩阵的左乘。 +以下观点存在歧义,故做删除标注: + + +在图像处理中,越靠近右边的矩阵越先执行,所以pre操作会先执行,而post操作会后执行。 ++ +在实际操作中,我们每一步都会得出计算结果,但是为什么还会用存在先后的说法? 这是因为矩阵乘法规则,用一个例子说明: + +> +```java +Matrix matrix = new Matrix(); +matrix.postScale(0.5f, 0.8f); +matrix.preTranslate(1000, 1000); +Log.e(TAG, "MatrixTest:3" + matrix.toShortString()); +``` +> +在上面的操作中,如果按照正常的思路,先缩放,后平移,缩放操作执行在前,不会影响到后续的平移操作,但是执行结果却发现平移距离变成了(500, 800),这一结果是符合矩阵乘法的运算规律的,也就是说缩放操作影响到了平移操作,**相当于先执行了平移操作,然后执行的缩放操作,因此才有pre操作会先执行,而post操作会后执行这一说法**。 **假设我们需要先缩放再平移,下面我们用不同对方式来构造这一个矩阵:** From 7851036ae608c2a90144719ba3dadf3c33b357b5 Mon Sep 17 00:00:00 2001 From: sloopDate: Tue, 2 Aug 2016 21:33:33 +0800 Subject: [PATCH 230/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index 45c8ffc6..12cbd2f1 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -433,7 +433,7 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); 在图像处理中,越靠近右边的矩阵越先执行,所以pre操作会先执行,而post操作会后执行。 -在实际操作中,我们每一步都会得出计算结果,但是为什么还会用存在先后的说法? 这是因为矩阵乘法规则,用一个例子说明: +在实际操作中,我们每一步操作都会得出计算结果,但是为什么还会用存在先后的说法? 这是因为矩阵乘法规则,用一个例子说明: > ```java From afced6b7aad3316a3e2e4a2c7dbce0fa5ee73fe7 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 21:40:27 +0800 Subject: [PATCH 231/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index 12cbd2f1..369fa2ba 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -433,7 +433,7 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); 在图像处理中,越靠近右边的矩阵越先执行,所以pre操作会先执行,而post操作会后执行。 -在实际操作中,我们每一步操作都会得出计算结果,但是为什么还会用存在先后的说法? 这是因为矩阵乘法规则,用一个例子说明: +在实际操作中,我们每一步操作都会得出准确的计算结果,但是为什么还会用存在先后的说法? 难道真的能够用pre和post影响计算顺序? 这是因为矩阵乘法规则,用一个例子说明: > ```java @@ -443,7 +443,9 @@ matrix.preTranslate(1000, 1000); Log.e(TAG, "MatrixTest:3" + matrix.toShortString()); ``` > -在上面的操作中,如果按照正常的思路,先缩放,后平移,缩放操作执行在前,不会影响到后续的平移操作,但是执行结果却发现平移距离变成了(500, 800),这一结果是符合矩阵乘法的运算规律的,也就是说缩放操作影响到了平移操作,**相当于先执行了平移操作,然后执行的缩放操作,因此才有pre操作会先执行,而post操作会后执行这一说法**。 +在上面的操作中,如果按照正常的思路,先缩放,后平移,缩放操作执行在前,不会影响到后续的平移操作,但是执行结果却发现平移距离变成了(500, 800)。 + +> 在上面例子中,计算顺序是没有问题的,先计算的缩放,然后计算的平移,而缩放影响到平移则是因为前一步缩放后的结果矩阵右乘了平移矩阵,这是符合矩阵乘法的运算规律的,也就是说缩放操作虽然在前却影响到了平移操作,**相当于先执行了平移操作,然后执行的缩放操作,因此才有pre操作会先执行,而post操作会后执行这一说法**。 **假设我们需要先缩放再平移,下面我们用不同对方式来构造这一个矩阵:** From eb4130c0fa387fa14f5ad68662c99b55a1789620 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 2 Aug 2016 21:55:41 +0800 Subject: [PATCH 232/522] Update --- CustomView/Advance/[09]Matrix_Basic.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/CustomView/Advance/[09]Matrix_Basic.md b/CustomView/Advance/[09]Matrix_Basic.md index 369fa2ba..044cbaf4 100644 --- a/CustomView/Advance/[09]Matrix_Basic.md +++ b/CustomView/Advance/[09]Matrix_Basic.md @@ -433,7 +433,7 @@ matrix.postScale(0.5f, 0.5f, pivotX, pivotY); 在图像处理中,越靠近右边的矩阵越先执行,所以pre操作会先执行,而post操作会后执行。 -在实际操作中,我们每一步操作都会得出准确的计算结果,但是为什么还会用存在先后的说法? 难道真的能够用pre和post影响计算顺序? 这是因为矩阵乘法规则,用一个例子说明: +在实际操作中,我们每一步操作都会得出准确的计算结果,但是为什么还会用存在先后的说法? 难道真的能够用pre和post影响计算顺序? 实则不然,下面我们用一个例子说明: > ```java @@ -448,13 +448,14 @@ Log.e(TAG, "MatrixTest:3" + matrix.toShortString()); > 在上面例子中,计算顺序是没有问题的,先计算的缩放,然后计算的平移,而缩放影响到平移则是因为前一步缩放后的结果矩阵右乘了平移矩阵,这是符合矩阵乘法的运算规律的,也就是说缩放操作虽然在前却影响到了平移操作,**相当于先执行了平移操作,然后执行的缩放操作,因此才有pre操作会先执行,而post操作会后执行这一说法**。 -**假设我们需要先缩放再平移,下面我们用不同对方式来构造这一个矩阵:** +### 下面我们用不同对方式来构造一个矩阵: +**假设我们需要先缩放再平移。** -> 注意: -* 1.由于矩阵乘法不满足交换律,请保证初始矩阵为空,如果初始矩阵不为空,则可能导致运算结果不同。 -* 2.请构造顺序,顺序是会影响结果的。 +* 1.由于矩阵乘法不满足交换律,请保证使用初始矩阵(Initial Matrix),否则可能导致运算结果不同。 +* 2.注意构造顺序,顺序是会影响结果的。 +* 3.Initial Matrix是指new出来的新矩阵,或者reset后的矩阵,是一个单位矩阵。 #### 1.仅用pre: @@ -481,7 +482,7 @@ $$ \\left [ \\begin{matrix} & &\\\\ - & Empty Matrix &\\\\ + & Initial Matrix &\\\\ & & \\end{1} \\right ] @@ -543,7 +544,7 @@ sx & 0 & 0\\\\ \\left [ \\begin{matrix} & &\\\\ - & Empty Matrix &\\\\ + & Initial Matrix &\\\\ & & \\end{1} \\right ] @@ -592,7 +593,7 @@ $$ \\left [ \\begin{matrix} & &\\\\ - & Empty Matrix &\\\\ + & Initial Matrix &\\\\ & & \\end{1} \\right ] From c4813f5096333c5c18336935b219e1f59813214a Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 3 Aug 2016 01:25:55 +0800 Subject: [PATCH 233/522] Update --- CustomView/Advance/[10]Matrix_Method.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index d2fbecc8..4f60b3e5 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -1 +1,18 @@ # Matrix方法 + +本篇正式讲解Matrix中各个方法的用途,以及Matrix的部分实用技巧。 + + +## Matrix 方法表 + +方法类别 | 相关API | 摘要 +-----------|---------------------------------------------------------|------------------------ +基本方法 | equals hashCode toString toShortString | 比较、 获取哈希值、 转换为字符串 +数值操作 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 +数值计算 | mapPoints mapRadius mapRect mapVectors | 计算变换后的数值 +设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 +前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 +后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 +特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 +矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... + From 70c3ce002f8901bc5ce7b31a8c8eb005de64cf26 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 3 Aug 2016 23:50:15 +0800 Subject: [PATCH 234/522] Add Matrix Chart --- QuickChart/Matrix.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/QuickChart/Matrix.md b/QuickChart/Matrix.md index 01bf7cb8..12738f1c 100644 --- a/QuickChart/Matrix.md +++ b/QuickChart/Matrix.md @@ -1 +1,12 @@ # Matrix常用操作速查表 + +方法类别 | 相关API | 摘要 +-----------|---------------------------------------------------------|------------------------ +基本方法 | equals hashCode toString toShortString | 比较、 获取哈希值、 转换为字符串 +数值操作 | set reset setValues getValues | 设置、 重置、 设置数值、 获取数值 +数值计算 | mapPoints mapRadius mapRect mapVectors | 计算变换后的数值 +设置(set) | setConcat setRotate setScale setSkew setTranslate | 设置变换 +前乘(pre) | preConcat preRotate preScale preSkew preTranslate | 前乘变换 +后乘(post) | postConcat postRotate postScale postSkew postTranslate | 后乘变换 +特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 +矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... \ No newline at end of file From 0f4c85a2a60870191861e2f15bc2434be5cab910 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 3 Aug 2016 23:52:45 +0800 Subject: [PATCH 235/522] Add Matrix Chart Index --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 607fce1f..d6edb38d 100644 --- a/README.md +++ b/README.md @@ -49,6 +49,7 @@ * [Canvas常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Canvas.md) * [Path常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Path.md) +* [Matrix常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Matrix.md) * [贝塞尔曲线常用操作速查表](https://github.com/GcsSloop/AndroidNote/blob/master/QuickChart/Bezier.md) ****** From 28c166e4d30e195b4ee5d136657555ce7d510bfd Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 4 Aug 2016 01:39:54 +0800 Subject: [PATCH 236/522] Add Title --- CustomView/Advance/[10]Matrix_Method.md | 28 +++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index 4f60b3e5..3ac9a615 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -1,9 +1,14 @@ # Matrix方法 -本篇正式讲解Matrix中各个方法的用途,以及Matrix的部分实用技巧。 + +## 前言 + +在上一篇文章中,我们对Matrix做了一个简单的了解,偏向理论,在本文中则会详细的讲解Matrix的具体用法,以及Matrix的一些实用技巧。 -## Matrix 方法表 +## Matrix方法表 + +按照惯例,先放方法表做概览。 方法类别 | 相关API | 摘要 -----------|---------------------------------------------------------|------------------------ @@ -16,3 +21,22 @@ 特殊方法 | setPolyToPoly setRectToRect rectStaysRect setSinCos | 一些特殊操作 矩阵相关 | invert isAffine isIdentity | 求逆矩阵、 是否为仿射矩阵、 是否为单位矩阵 ... + +## Matrix方法详解 + +### 基本方法 + +### 数值操作 + +### 数值计算 + +### set pre 与 post + +### 特殊方法 + +### 矩阵相关 + +## Matrix实用技巧 + + + From 8ae592b9ef54b94553c42581a554f2a63c2a2ada Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 4 Aug 2016 02:42:03 +0800 Subject: [PATCH 237/522] Add Course of PlantUML(Mac) --- Course/HowToUsePlantUMLInAS(Mac).md | 78 +++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Course/HowToUsePlantUMLInAS(Mac).md diff --git a/Course/HowToUsePlantUMLInAS(Mac).md b/Course/HowToUsePlantUMLInAS(Mac).md new file mode 100644 index 00000000..946389d3 --- /dev/null +++ b/Course/HowToUsePlantUMLInAS(Mac).md @@ -0,0 +1,78 @@ +# 在AndroidStudio中使用PlantUML(Mac) + +### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) + +## 前言 + +### 这是Mac平台设置教程,Windows平台戳这里:[在AndroidStudio中使用PlantUML(Windows)](https://github.com/GcsSloop/AndroidNote/blob/master/Course/HowToUsePlantUMLInAS.md) + +**Unified Modeling Language (UML)又称统一建模语言或标准建模语言,用来描述 类(对象的)、对象、关联、职责、行为、接口、用例、包、顺序、协作,以及状态。是用来帮助自己理清众多类之间复杂关系的不二利器,也能帮助别人快速理解你的设计思路。** + +那么,我们怎么在AndroidStudio中创建自己的UML类图呢?接下来我就教大家如何用正确的姿势创建UML类图。 + +## 一.用正确的姿势安装panltUML插件 +### 1.File->Settings->Plugins->Browse repositories + +### 2.在搜索框输入plantUML + +### 3.导入插件 +#### (ps:由于我已经安装过了,所以没有Install plugin 按钮,未安装的都有这样一个按钮,如下,点击安装即可。) + + +#### 如果以上步骤正确的完成,重启AndroidStudio 右键->new 的时候你会发现多了这么一堆东西,如果出现了这些说明plantUML已经正确的安装了。 + + +#### 当然了,所有事情都不会是一帆风顺的,当你迫不及待的想创建一个文件试试的时候你会发现下面的情况。 + +#### 想必此时你的内心一定和我当时一样,一万头草泥马奔腾而过,这都是什么东西!!! +#### 一切事情都是有原因的,而这个因为你还缺少一个必要的东西,就是大名鼎鼎的贝尔实验室开发的一个工具包:Graphviz。 +## 二,用正确的姿势安装Graphviz + +此处建议使用Homebrew自动下载安装,如果你还没有用过Homebrew来帮助你管理软件,参考这里: [Homebrew&HomebrewCask](https://github.com/GcsSloop/MacDeveloper/blob/master/Tools/Homebrew.md) + +安装好homebrew后直接输入如下命令,按下回车后等待片刻即可安装成功: + +``` +brew install graphviz +``` + +安装完成后,Homebrew会告诉你安装位置,请记好这个位置,你也可以用info命名查看安装位置: + +``` +brew info graphviz +``` + +我的安装位置在 `/usr/local/Cellar/graphviz/2.38.0` + + + + +## 三.用正确的姿势设置plantUML + +### 1.点击右上角的设置按钮或进入File->Settings->Other Settings ->PlantUML或者在预览页面点击右上角的设置图标,如下: + +### 2.将文件路径填写为刚刚Graphviz的目录下bin目录中dot文件。 + +#### (我的为:/usr/local/Cellar/graphviz/2.38.0/bin/dot) + + + + +### 3.点击OK 刷新一下界面就能看到结果了。 + +#### 讲到这里,就已经安装完成了,可以愉快的用代码来书写UML图了。 + +#### 什么?你说你还不会书写的语法?没关系,其实我也不会,不过我有一个好的教程推荐给你,相信你看完就明白啦。 + +## 四.用正确的姿势学习使用UML +### 1.[【PlantUML快速指南戳这里】](http://archive.3zso.com/archives/plantuml-quickstart.html) +### 2.注意,这个教程中的语法和AndroidStudio中基本一致,区别就是开始和结束标志不同。 + +####好了,到这里该教程正式结束,祝各位小伙伴能愉快的使用plantUML玩耍。 + +## About Me +### 作者微博: [@GcsSloop](http://weibo.com/GcsSloop) + + + + From c56db91ee610ab1f56cb847db6d804dd9c351379 Mon Sep 17 00:00:00 2001 From: sloop
Date: Thu, 4 Aug 2016 02:46:57 +0800 Subject: [PATCH 238/522] Update --- Course/HowToUsePlantUMLInAS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Course/HowToUsePlantUMLInAS.md b/Course/HowToUsePlantUMLInAS.md index baa7809a..eeaccbf0 100644 --- a/Course/HowToUsePlantUMLInAS.md +++ b/Course/HowToUsePlantUMLInAS.md @@ -4,6 +4,8 @@ ## 前言 +### 这是Windows平台设置教程,Mac平台戳这里:在AndroidStudio中使用PlantUML(Mac) + **Unified Modeling Language (UML)又称统一建模语言或标准建模语言,用来描述 类(对象的)、对象、关联、职责、行为、接口、用例、包、顺序、协作,以及状态。是用来帮助自己理清众多类之间复杂关系的不二利器,也能帮助别人快速理解你的设计思路。** 那么,我们怎么在AndroidStudio中创建自己的UML类图呢?接下来我就教大家如何用正确的姿势创建UML类图。 From 825a315091101d986f4cbdce82a1674c0ade14c7 Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 4 Aug 2016 03:00:50 +0800 Subject: [PATCH 239/522] Update --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d6edb38d..8caedcf2 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,8 @@ ## [教程类](https://github.com/GcsSloop/AndroidNote/tree/master/Course/README.md) -* [在AndroidStudio中使用PlantUML](https://github.com/GcsSloop/AndroidNote/blob/master/Course/HowToUsePlantUMLInAS.md) +* [在AndroidStudio中使用PlantUML(Win)](https://github.com/GcsSloop/AndroidNote/blob/master/Course/HowToUsePlantUMLInAS.md) +* [在AndroidStudio中使用PlantUML(Mac)](https://github.com/GcsSloop/AndroidNote/blob/master/Course/HowToUsePlantUMLInAS(Mac).md) * [优雅的发布Android开源库(论JitPack的优越性)](https://github.com/GcsSloop/AndroidNote/blob/master/Course/ReleaseLibraryByJitPack.md) ****** From d10398a5b60afb2ecf966a8c9bfca765418a5d93 Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 4 Aug 2016 03:11:19 +0800 Subject: [PATCH 240/522] Update Course Index --- Course/README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/Course/README.md b/Course/README.md index 67b44aba..c7546a08 100644 --- a/Course/README.md +++ b/Course/README.md @@ -1,6 +1,8 @@ # 教程类 -**教程类** | -:---: | - | -
| + + From f769d6a059eddd26fac83311d5d362fac5122301 Mon Sep 17 00:00:00 2001 From: sloop
Date: Thu, 4 Aug 2016 03:13:48 +0800 Subject: [PATCH 241/522] Update --- ...{HowToUsePlantUMLInAS(Mac).md => HowToUsePlantUMLInAS[Mac].md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename Course/{HowToUsePlantUMLInAS(Mac).md => HowToUsePlantUMLInAS[Mac].md} (100%) diff --git a/Course/HowToUsePlantUMLInAS(Mac).md b/Course/HowToUsePlantUMLInAS[Mac].md similarity index 100% rename from Course/HowToUsePlantUMLInAS(Mac).md rename to Course/HowToUsePlantUMLInAS[Mac].md From 5f98ea4e9269e96bd2f885d6e92090d65b8db0c0 Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 4 Aug 2016 03:37:50 +0800 Subject: [PATCH 242/522] Update --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8caedcf2..19e33b42 100644 --- a/README.md +++ b/README.md @@ -41,7 +41,7 @@ ## [教程类](https://github.com/GcsSloop/AndroidNote/tree/master/Course/README.md) * [在AndroidStudio中使用PlantUML(Win)](https://github.com/GcsSloop/AndroidNote/blob/master/Course/HowToUsePlantUMLInAS.md) -* [在AndroidStudio中使用PlantUML(Mac)](https://github.com/GcsSloop/AndroidNote/blob/master/Course/HowToUsePlantUMLInAS(Mac).md) +* [在AndroidStudio中使用PlantUML(Mac)](https://github.com/GcsSloop/AndroidNote/blob/master/Course/HowToUsePlantUMLInAS%5BMac%5D.md) * [优雅的发布Android开源库(论JitPack的优越性)](https://github.com/GcsSloop/AndroidNote/blob/master/Course/ReleaseLibraryByJitPack.md) ****** From c36947ff97b3a00ce38557cca4b3974d1fde8a8e Mon Sep 17 00:00:00 2001 From: sloop Date: Thu, 4 Aug 2016 03:38:24 +0800 Subject: [PATCH 243/522] Update --- Course/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Course/README.md b/Course/README.md index c7546a08..b9fd97f3 100644 --- a/Course/README.md +++ b/Course/README.md @@ -3,6 +3,6 @@ From 79385efd5c8ea57535c883ffe046be95a0b575ac Mon Sep 17 00:00:00 2001 From: sloop Date: Fri, 5 Aug 2016 00:42:25 +0800 Subject: [PATCH 244/522] Add Code Source --- CustomView/Advance/Code/SearchView.java | 244 ++++++++++++++++++++++++ 1 file changed, 244 insertions(+) create mode 100644 CustomView/Advance/Code/SearchView.java diff --git a/CustomView/Advance/Code/SearchView.java b/CustomView/Advance/Code/SearchView.java new file mode 100644 index 00000000..8f3a3a23 --- /dev/null +++ b/CustomView/Advance/Code/SearchView.java @@ -0,0 +1,244 @@ +/** + * Author: GcsSloop + * + * Created Date: 16/5/31 + *
+ * Copyright (C) 2016 GcsSloop. + *
+ * GitHub: https://github.com/GcsSloop + */ +public class SearchView extends View { + + // 画笔 + private Paint mPaint; + + // View 宽高 + private int mViewWidth; + private int mViewHeight; + + // 这个视图拥有的状态 + public static enum State { + NONE, + STARTING, + SEARCHING, + ENDING + } + + // 当前的状态(非常重要) + private State mCurrentState = State.NONE; + + // 放大镜与外部圆环 + private Path path_srarch; + private Path path_circle; + + // 测量Path 并截取部分的工具 + private PathMeasure mMeasure; + + // 默认的动效周期 2s + private int defaultDuration = 2000; + + // 控制各个过程的动画 + private ValueAnimator mStartingAnimator; + private ValueAnimator mSearchingAnimator; + private ValueAnimator mEndingAnimator; + + // 动画数值(用于控制动画状态,因为同一时间内只允许有一种状态出现,具体数值处理取决于当前状态) + private float mAnimatorValue = 0; + + // 动效过程监听器 + private ValueAnimator.AnimatorUpdateListener mUpdateListener; + private Animator.AnimatorListener mAnimatorListener; + + // 用于控制动画状态转换 + private Handler mAnimatorHandler; + + // 判断是否已经搜索结束 + private boolean isOver = false; + + private int count = 0; + + public SearchView(Context context) { + super(context); + + initPaint(); + + initPath(); + + initListener(); + + initHandler(); + + initAnimator(); + + // 进入开始动画 + mCurrentState = State.STARTING; + mStartingAnimator.start(); + + } + + private void initPaint() { + mPaint = new Paint(); + mPaint.setStyle(Paint.Style.STROKE); + mPaint.setColor(Color.WHITE); + mPaint.setStrokeWidth(15); + mPaint.setStrokeCap(Paint.Cap.ROUND); + mPaint.setAntiAlias(true); + } + + private void initPath() { + path_srarch = new Path(); + path_circle = new Path(); + + mMeasure = new PathMeasure(); + + // 注意,不要到360度,否则内部会自动优化,测量不能取到需要的数值 + RectF oval1 = new RectF(-50, -50, 50, 50); // 放大镜圆环 + path_srarch.addArc(oval1, 45, 359.9f); + + RectF oval2 = new RectF(-100, -100, 100, 100); // 外部圆环 + path_circle.addArc(oval2, 45, -359.9f); + + float[] pos = new float[2]; + + mMeasure.setPath(path_circle, false); // 放大镜把手的位置 + mMeasure.getPosTan(0, pos, null); + + path_srarch.lineTo(pos[0], pos[1]); // 放大镜把手 + + Log.i("TAG", "pos=" + pos[0] + ":" + pos[1]); + } + + private void initListener() { + mUpdateListener = new ValueAnimator.AnimatorUpdateListener() { + @Override + public void onAnimationUpdate(ValueAnimator animation) { + mAnimatorValue = (float) animation.getAnimatedValue(); + invalidate(); + } + }; + + mAnimatorListener = new Animator.AnimatorListener() { + @Override + public void onAnimationStart(Animator animation) { + + } + + @Override + public void onAnimationEnd(Animator animation) { + // getHandle发消息通知动画状态更新 + mAnimatorHandler.sendEmptyMessage(0); + } + + @Override + public void onAnimationCancel(Animator animation) { + + } + + @Override + public void onAnimationRepeat(Animator animation) { + + } + }; + } + + private void initHandler() { + mAnimatorHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (mCurrentState) { + case STARTING: + // 从开始动画转换好搜索动画 + isOver = false; + mCurrentState = State.SEARCHING; + mStartingAnimator.removeAllListeners(); + mSearchingAnimator.start(); + break; + case SEARCHING: + if (!isOver) { // 如果搜索未结束 则继续执行搜索动画 + mSearchingAnimator.start(); + Log.e("Update", "RESTART"); + + count++; + if (count>2){ // count大于2则进入结束状态 + isOver = true; + } + } else { // 如果搜索已经结束 则进入结束动画 + mCurrentState = State.ENDING; + mEndingAnimator.start(); + } + break; + case ENDING: + // 从结束动画转变为无状态 + mCurrentState = State.NONE; + break; + } + } + }; + } + + private void initAnimator() { + mStartingAnimator = ValueAnimator.ofFloat(0, 1).setDuration(defaultDuration); + mSearchingAnimator = ValueAnimator.ofFloat(0, 1).setDuration(defaultDuration); + mEndingAnimator = ValueAnimator.ofFloat(1, 0).setDuration(defaultDuration); + + mStartingAnimator.addUpdateListener(mUpdateListener); + mSearchingAnimator.addUpdateListener(mUpdateListener); + mEndingAnimator.addUpdateListener(mUpdateListener); + + mStartingAnimator.addListener(mAnimatorListener); + mSearchingAnimator.addListener(mAnimatorListener); + mEndingAnimator.addListener(mAnimatorListener); + } + + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + mViewWidth = w; + mViewHeight = h; + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + drawSearch(canvas); + } + + private void drawSearch(Canvas canvas) { + + mPaint.setColor(Color.WHITE); + + + canvas.translate(mViewWidth / 2, mViewHeight / 2); + + canvas.drawColor(Color.parseColor("#0082D7")); + + switch (mCurrentState) { + case NONE: + canvas.drawPath(path_srarch, mPaint); + break; + case STARTING: + mMeasure.setPath(path_srarch, false); + Path dst = new Path(); + mMeasure.getSegment(mMeasure.getLength() * mAnimatorValue, mMeasure.getLength(), dst, true); + canvas.drawPath(dst, mPaint); + break; + case SEARCHING: + mMeasure.setPath(path_circle, false); + Path dst2 = new Path(); + float stop = mMeasure.getLength() * mAnimatorValue; + float start = (float) (stop - ((0.5 - Math.abs(mAnimatorValue - 0.5)) * 200f)); + mMeasure.getSegment(start, stop, dst2, true); + canvas.drawPath(dst2, mPaint); + break; + case ENDING: + mMeasure.setPath(path_srarch, false); + Path dst3 = new Path(); + mMeasure.getSegment(mMeasure.getLength() * mAnimatorValue, mMeasure.getLength(), dst3, true); + canvas.drawPath(dst3, mPaint); + break; + } + } +} From 8f4cb78c9b9622fa80fd04c4dcc7619ad40a9b3a Mon Sep 17 00:00:00 2001 From: sloop
Date: Fri, 5 Aug 2016 22:40:13 +0800 Subject: [PATCH 245/522] Add Basic Method --- CustomView/Advance/[10]Matrix_Method.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index 3ac9a615..7a12d652 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -26,6 +26,16 @@ ### 基本方法 +基本方法没有什么内容,在此处简单介绍一下。 + +方法 | 简介 +---|--- +equals | 比较两个Matrix的数值是否相同 +hashCode | 获取Matrix的哈希值 +toString | 将Matrix转换为字符串
`Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}` +toShortString | 将Matrix转换为短字符串
`[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]` + + ### 数值操作 ### 数值计算 From aeaac3304e4569c8ada444dd3f0b5bed7474bf66 Mon Sep 17 00:00:00 2001 From: sloopDate: Fri, 5 Aug 2016 22:41:34 +0800 Subject: [PATCH 246/522] Update Basic Method --- CustomView/Advance/[10]Matrix_Method.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index 7a12d652..bcaa18d3 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -26,7 +26,7 @@ ### 基本方法 -基本方法没有什么内容,在此处简单介绍一下。 +基本方法内容比较简单,在此处简要介绍一下。 方法 | 简介 ---|--- From f7a57c3b704df41e07338e010511919f0d1b1334 Mon Sep 17 00:00:00 2001 From: sloop Date: Sat, 6 Aug 2016 01:32:59 +0800 Subject: [PATCH 247/522] Add constructor method --- CustomView/Advance/[10]Matrix_Method.md | 45 +++++++++++++++++++++++++ 1 file changed, 45 insertions(+) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index bcaa18d3..8d77f408 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -24,6 +24,50 @@ ## Matrix方法详解 +### 构造方法 + +构造方法没有在上面表格中列出。 + +**无参构造** + +``` +Matrix () +``` +创建一个全新的Matrix,使用格式如下: + +``` +Matrix matrix = new Matrix(); +``` + +通过这种方式创建出来的并不是一个数值全部为空的矩阵,而是一个单位矩阵,如下: + + + + +**有参构造** + +``` +Matrix (Matrix src) +``` + +这种方法则需要一个已经存在的矩阵作为参数,如下: + +``` +Matrix matrix = new Matrix(src); +``` + +创建一个Matrix,并对src深拷贝(理解为新的matrix和src是两个对象,但内部数值相同即可)。 + + ### 基本方法 基本方法内容比较简单,在此处简要介绍一下。 @@ -38,6 +82,7 @@ toShortString | 将Matrix转换为短字符串
`[1.0, 0.0, 0.0][0.0, 1.0, 0. ### 数值操作 + ### 数值计算 ### set pre 与 post From 13ab0fcd9a3a9a888bcf59e9d7f222ffea9cc240 Mon Sep 17 00:00:00 2001 From: sloopDate: Sat, 6 Aug 2016 02:13:49 +0800 Subject: [PATCH 248/522] Add value method --- CustomView/Advance/[10]Matrix_Method.md | 54 ++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 6 deletions(-) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index 8d77f408..e8a87305 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -72,16 +72,58 @@ Matrix matrix = new Matrix(src); 基本方法内容比较简单,在此处简要介绍一下。 -方法 | 简介 ----|--- -equals | 比较两个Matrix的数值是否相同 -hashCode | 获取Matrix的哈希值 -toString | 将Matrix转换为字符串
`Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}` -toShortString | 将Matrix转换为短字符串
`[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]` +**1.equals** + +比较两个Matrix的数值是否相同。 + +**2.hashCode** + +获取Matrix的哈希值。 + +**3.toString** + +将Matrix转换为字符串: `Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}` + +**4.toShortString** + +将Matrix转换为短字符串: `[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]` ### 数值操作 +数值操作这一组方法可以帮助我们直接控制Matrix里面的数值。 + +**1.set** + +``` +void set (Matrix src) +``` + +没有返回值,有一个参数,作用是将参数Matrix的数值复制到当前Matrix中。如果参数为空,则重置当前Matrix,相当于`reset()`。 + +**2.reset** + +``` +void reset () +``` + +重置当前Matrix(将当前Matrix重置为单位矩阵)。 + +**3.setValues** + +``` +void setValues (float[] values) +``` + +setValues的参数是浮点型的一维数组,长度需要大于9,拷贝数组中的前9位数值赋值给当前Matrix。 + +**4.getValues** + +``` +void getValues (float[] values) +``` + +很显然,getValues和setValues是一对方法,参数也是浮点型的一维数组,长度需要大于9,将Matrix中的数值拷贝进参数的前9位中。 ### 数值计算 From 39a7ff5ce877165002a992fba986171c461cbb55 Mon Sep 17 00:00:00 2001 From: sloopDate: Sun, 7 Aug 2016 02:57:40 +0800 Subject: [PATCH 249/522] Add value compute --- CustomView/Advance/[10]Matrix_Method.md | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index e8a87305..a995ade2 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -59,7 +59,7 @@ $$) Matrix (Matrix src) ``` -这种方法则需要一个已经存在的矩阵作为参数,如下: +这种方法则需要一个已经存在的矩阵作为参数,使用格式如下: ``` Matrix matrix = new Matrix(src); @@ -127,6 +127,22 @@ void getValues (float[] values) ### 数值计算 +**1.mapPoints** + +``` + +``` + +**2.mapRadius** + + + +**3.mapRect** + + + +**4.mapVectors** + ### set pre 与 post ### 特殊方法 From e450e90f849ce636a2b8e686211bdecad93720e6 Mon Sep 17 00:00:00 2001 From: sloop Date: Sun, 7 Aug 2016 11:58:49 +0800 Subject: [PATCH 250/522] Update value compute --- CustomView/Advance/[10]Matrix_Method.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index a995ade2..d84f13b3 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -130,9 +130,22 @@ void getValues (float[] values) **1.mapPoints** ``` +void mapPoints (float[] pts) +void mapPoints (float[] dst, float[] src) + +void mapPoints (float[] dst, int dstIndex,float[] src, int srcIndex, int pointCount) ``` +计算一组点基于当前Matrix变换后的位置,(由于是计算点,所以参数中的float数组长度一般都是偶数的)。 + +它有三个重载方法: + + + + + + **2.mapRadius** From b029bfa5eedc8d8464f83bd2680c16a2c6acedab Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 8 Aug 2016 04:55:52 +0800 Subject: [PATCH 251/522] Update value compute --- CustomView/Advance/[10]Matrix_Method.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index d84f13b3..00106437 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -141,9 +141,11 @@ void mapPoints (float[] dst, int dstIndex,float[] src, int srcIndex, int pointCo 它有三个重载方法: +(1) `void mapPoints (float[] pts)` 方法仅有一个参数,pts数组作为参数传递原始数值,计算结果仍存放在pts中。 +(2) `void mapPoints (float[] dst, float[] src)` ,src作为参数传递原始数值,计算结果存放在dst中。 - +(3) `void mapPoints (float[] dst, int dstIndex,float[] src, int srcIndex, int pointCount)` 可以指定只计算一部分数值。 **2.mapRadius** From a3d1b1e12311c92c7ac9c18c5bacada6e94c5b95 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 8 Aug 2016 10:54:42 +0800 Subject: [PATCH 252/522] Update value compute --- CustomView/Advance/[10]Matrix_Method.md | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index 00106437..cf39d65a 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -143,8 +143,40 @@ void mapPoints (float[] dst, int dstIndex,float[] src, int srcIndex, int pointCo (1) `void mapPoints (float[] pts)` 方法仅有一个参数,pts数组作为参数传递原始数值,计算结果仍存放在pts中。 +示例: + +``` java + + // 初始数据为三个点 (0, 0) (80, 100) (400, 300) + float[] pts = new float[]{0, 0, 80, 100, 400, 300}; + + // 构造一个matrix,x坐标缩放0.5 + Matrix matrix = new Matrix(); + matrix.setScale(0.5f, 1f); + + // 输出pts计算之前数据 + Log.i(TAG, "before: "+ Arrays.toString(pts)); + + // 调用map方法计算 + matrix.mapPoints(pts); + + // 输出pts计算之后数据 + Log.i(TAG, "after : "+ Arrays.toString(pts)); +``` + +结果: + +``` +before: [0.0, 0.0, 80.0, 100.0, 400.0, 300.0] +after : [0.0, 0.0, 40.0, 100.0, 200.0, 300.0] +``` + (2) `void mapPoints (float[] dst, float[] src)` ,src作为参数传递原始数值,计算结果存放在dst中。 +``` +``` + + (3) `void mapPoints (float[] dst, int dstIndex,float[] src, int srcIndex, int pointCount)` 可以指定只计算一部分数值。 From d8e8d9eb56e970aad305be71cacf1769defdf756 Mon Sep 17 00:00:00 2001 From: sloop Date: Mon, 8 Aug 2016 11:18:07 +0800 Subject: [PATCH 253/522] Update value compute --- CustomView/Advance/[10]Matrix_Method.md | 47 +++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 3 deletions(-) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index cf39d65a..b290034d 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -137,7 +137,7 @@ void mapPoints (float[] dst, float[] src) void mapPoints (float[] dst, int dstIndex,float[] src, int srcIndex, int pointCount) ``` -计算一组点基于当前Matrix变换后的位置,(由于是计算点,所以参数中的float数组长度一般都是偶数的)。 +计算一组点基于当前Matrix变换后的位置,(由于是计算点,所以参数中的float数组长度一般都是偶数的,若为奇数,则最后一个数值不参与计算)。 它有三个重载方法: @@ -171,14 +171,55 @@ before: [0.0, 0.0, 80.0, 100.0, 400.0, 300.0] after : [0.0, 0.0, 40.0, 100.0, 200.0, 300.0] ``` -(2) `void mapPoints (float[] dst, float[] src)` ,src作为参数传递原始数值,计算结果存放在dst中。 +(2) `void mapPoints (float[] dst, float[] src)` ,src作为参数传递原始数值,计算结果存放在dst中,src不变。 -``` +如果原始数据需要保留则一般使用这种方法。 + +示例: + +``` java + // 初始数据为三个点 (0, 0) (80, 100) (400, 300) + float[] src = new float[]{0, 0, 80, 100, 400, 300}; + float[] dst = new float[6]; + + // 构造一个matrix,x坐标缩放0.5 + Matrix matrix = new Matrix(); + matrix.setScale(0.5f, 1f); + + // 输出计算之前数据 + Log.i(TAG, "before: src="+ Arrays.toString(src)); + Log.i(TAG, "before: dst="+ Arrays.toString(dst)); + + // 调用map方法计算 + matrix.mapPoints(dst,src); + + // 输出计算之后数据 + Log.i(TAG, "after : src="+ Arrays.toString(src)); + Log.i(TAG, "after : dst="+ Arrays.toString(dst)); ``` +结果: + +``` +before: src=[0.0, 0.0, 80.0, 100.0, 400.0, 300.0] +before: dst=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +after : src=[0.0, 0.0, 80.0, 100.0, 400.0, 300.0] +after : dst=[0.0, 0.0, 40.0, 100.0, 200.0, 300.0] +``` (3) `void mapPoints (float[] dst, int dstIndex,float[] src, int srcIndex, int pointCount)` 可以指定只计算一部分数值。 +示例: + +``` java + +``` + +结果: + +``` + +``` **2.mapRadius** From 0eb83b878a304ba7c50dac9ff73c085ee9931ed4 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 9 Aug 2016 00:19:12 +0800 Subject: [PATCH 254/522] Update value compute --- CustomView/Advance/[10]Matrix_Method.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index b290034d..bc5094c5 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -209,6 +209,15 @@ after : dst=[0.0, 0.0, 40.0, 100.0, 200.0, 300.0] (3) `void mapPoints (float[] dst, int dstIndex,float[] src, int srcIndex, int pointCount)` 可以指定只计算一部分数值。 +参数 | 摘要 +---|--- +dst | 目标数据 +dstIndex | 目标数据存储位置起始下标 +src | 源数据 +srcIndex | 源数据存储位置起始下标 +pointCount | 计算的点个数 + + 示例: ``` java From e059189b07584834696cf4847f23cd33db571a87 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 9 Aug 2016 01:26:13 +0800 Subject: [PATCH 255/522] Update value compute --- CustomView/Advance/[10]Matrix_Method.md | 26 ++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index bc5094c5..3fcc2ae4 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -220,13 +220,37 @@ pointCount | 计算的点个数 示例: -``` java +> +将第二、三个点计算后存储进dst最开始位置。 +``` java + // 初始数据为三个点 (0, 0) (80, 100) (400, 300) + float[] src = new float[]{0, 0, 80, 100, 400, 300}; + float[] dst = new float[6]; + + // 构造一个matrix,x坐标缩放0.5 + Matrix matrix = new Matrix(); + matrix.setScale(0.5f, 1f); + + // 输出计算之前数据 + Log.i(TAG, "before: src="+ Arrays.toString(src)); + Log.i(TAG, "before: dst="+ Arrays.toString(dst)); + + // 调用map方法计算 + matrix.mapPoints(dst, 0, src, 2, 2); + + // 输出计算之后数据 + Log.i(TAG, "after : src="+ Arrays.toString(src)); + Log.i(TAG, "after : dst="+ Arrays.toString(dst)); ``` 结果: ``` +before: src=[0.0, 0.0, 80.0, 100.0, 400.0, 300.0] +before: dst=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0] +after : src=[0.0, 0.0, 80.0, 100.0, 400.0, 300.0] +after : dst=[40.0, 100.0, 200.0, 300.0, 0.0, 0.0] ``` From bb09904f2717558264885b142c07f388eedc8180 Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 9 Aug 2016 01:27:50 +0800 Subject: [PATCH 256/522] Update value compute --- CustomView/Advance/[10]Matrix_Method.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index 3fcc2ae4..be84b4d3 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -236,7 +236,7 @@ pointCount | 计算的点个数 Log.i(TAG, "before: src="+ Arrays.toString(src)); Log.i(TAG, "before: dst="+ Arrays.toString(dst)); - // 调用map方法计算 + // 调用map方法计算(最后一个2表示两个点,并非两个数值) matrix.mapPoints(dst, 0, src, 2, 2); // 输出计算之后数据 From cade19ee89d11239fd779b280b75fd4b7713fc1e Mon Sep 17 00:00:00 2001 From: sloop Date: Tue, 9 Aug 2016 01:29:06 +0800 Subject: [PATCH 257/522] Update value compute --- CustomView/Advance/[10]Matrix_Method.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/CustomView/Advance/[10]Matrix_Method.md b/CustomView/Advance/[10]Matrix_Method.md index be84b4d3..f2bb5a99 100644 --- a/CustomView/Advance/[10]Matrix_Method.md +++ b/CustomView/Advance/[10]Matrix_Method.md @@ -236,7 +236,7 @@ pointCount | 计算的点个数 Log.i(TAG, "before: src="+ Arrays.toString(src)); Log.i(TAG, "before: dst="+ Arrays.toString(dst)); - // 调用map方法计算(最后一个2表示两个点,并非两个数值) + // 调用map方法计算(最后一个2表示两个点,即四个数值,并非两个数值) matrix.mapPoints(dst, 0, src, 2, 2); // 输出计算之后数据 @@ -251,7 +251,6 @@ before: src=[0.0, 0.0, 80.0, 100.0, 400.0, 300.0] before: dst=[0.0, 0.0, 0.0, 0.0, 0.0, 0.0] after : src=[0.0, 0.0, 80.0, 100.0, 400.0, 300.0] after : dst=[40.0, 100.0, 200.0, 300.0, 0.0, 0.0] - ``` **2.mapRadius** From a60b674cef6668a2f270025bf63c547a0bd91590 Mon Sep 17 00:00:00 2001 From: sloop Date: Wed, 10 Aug 2016 02:23:38 +0800 Subject: [PATCH 258/522] Update canvas chart --- QuickChart/Canvas.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/QuickChart/Canvas.md b/QuickChart/Canvas.md index 066f0967..edc90448 100644 --- a/QuickChart/Canvas.md +++ b/QuickChart/Canvas.md @@ -6,9 +6,9 @@ 绘制基本形状 | drawPoint, drawPoints, drawLine, drawLines, drawRect, drawRoundRect, drawOval, drawCircle, drawArc | 依次为 点、线、矩形、圆角矩形、椭圆、圆、圆弧