33### 作者微博: [ @GcsSloop ] ( http://weibo.com/GcsSloop )
44### 相关文章: [ 自定义View目录] ( http://www.gcssloop.com/customview/CustomViewIndex/ )
55
6- 本篇依旧属于Matrix,主要讲解Camera,Android下有很相机应用 ,其中的美颜相机更是不少,不过今天这个Camera可不是我们平时拍照的那个相机,而是graphic包下的Camera,专业给Matrix拍照的相机,不过既然是相机,作用都是类似的,主要是将3D的内容拍扁变成2D的内容。
6+ 本篇依旧属于Matrix,主要讲解Camera,Android下有很多相机应用 ,其中的美颜相机更是不少,不过今天这个Camera可不是我们平时拍照的那个相机,而是graphic包下的Camera,专业给Matrix拍照的相机,不过既然是相机,作用都是类似的,主要是将3D的内容拍扁变成2D的内容。
77
88众所周知,我们的手机屏幕是一个2D的平面,所以也没办法直接显示3D的信息,因此我们看到的所有3D效果都是3D在2D平面的投影而已,而本文中的Camera主要作用就是这个,将3D信息转换为2D平面上的投影,实际上这个类更像是一个操作Matrix的工具类,使用Camera和Matrix可以在不使用OpenGL的情况下制作出简单的3D效果。
99
1010
1111
1212## Camera常用方法表
1313
14- | 方法类别 | 相关 | 简介 |
14+ | 方法类别 | 相关API | 简介 |
1515| ---- | ---------------------------------------- | -------------- |
1616| 基本方法 | save、restore | 保存、 回滚 |
1717| 常用方法 | getMatrix、applyToCanvas | 获取Matrix、应用到画布 |
1818| 平移 | translate | 位移 |
19- | 旋转 | rotat (API 21 )、rotateX、rotateY、rotateZ | 各种旋转 |
19+ | 旋转 | rotat (API 12 )、rotateX、rotateY、rotateZ | 各种旋转 |
2020| 相机位置 | setLocation (API 12)、getLocationX (API 16)、getLocationY (API 16)、getLocationZ (API 16) | 设置与获取相机位置 |
2121
2222> Camera的方法并不是特别多,很多内容与之前的讲解的Canvas和Matrix类似,不过又稍有不同,之前的画布操作和Matrix主要是作用于2D空间,而Camera则主要作用于3D空间。
@@ -175,9 +175,9 @@ Matrix: [1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]
175175
176176
177177
178- 我知道,这样说你们肯定是蒙逼的,话说为啥远离摄像机的时候会接近摄像机在屏幕投影位置,而接近摄像机的时候会远离摄像机在屏幕投影位置 (´・_ ・`),肯定觉得我在逗你们玩,完全是前后矛盾,逻辑都不通,不过这个在这里的确是不矛盾的,因为远离是在3D空间里的情况,而接近只是在2D空间的投影,看下图。
178+ 我知道,这样说你们肯定是蒙逼的,话说为啥远离摄像机的时候会接近摄像机在屏幕投影位置(´・_ ・`),肯定觉得我在逗你们玩,完全是前后矛盾,逻辑都不通,不过这个在这里的确是不矛盾的,因为远离是在3D空间里的情况,而接近只是在2D空间的投影,看下图。
179179
180- > 假设大矩形是手机屏幕,摄像机位于屏幕左上角,请注意上面View与摄像机的距离以及下方View的大小以及距离左上角的距离 。
180+ > 假设大矩形是手机屏幕,白色小矩形是View, 摄像机位于屏幕左上角,请注意上面View与摄像机的距离以及下方View的大小以及距离左上角(摄像机在屏幕投影位置)的距离 。
181181
182182![ ] ( http://ww3.sinaimg.cn/large/005Xtdi2jw1f7qerbksn4g30dc0ct7vt.gif )
183183
@@ -199,7 +199,21 @@ Matrix: [1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]
199199
200200## 旋转
201201
202- 旋转是Camera制作3D效果的核心,不过它制作出来的并不能算是真正的3D,而是伪3D,因为View是没有厚度的,想要展示出立体效果一般需要两个View进行配合,
202+ 旋转是Camera制作3D效果的核心,不过它制作出来的并不能算是真正的3D,而是伪3D,因为View是没有厚度的。
203+
204+ ``` java
205+ // (API 12) 可以控制View同时绕x,y,z轴旋转,可以由下面几种方法复合而来。
206+ void rotate (float x, float y, float z);
207+
208+ // 控制View绕单个坐标轴旋转
209+ void rotateX (float deg);
210+ void rotateY (float deg);
211+ void rotateZ (float deg);
212+ ```
213+
214+ 这个东西说理论也不好理解,直接上图:
215+
216+
203217
204218
205219
0 commit comments