1 概述
本篇主要讲解camera,这里的camera并不是照相相关的类,而是android.graphics.Camera,这个类中封装了一个matrix,不熟悉的同学可以看前面的文章来了解。android matrix 最全方法详解与进阶(完整篇)
这里和前面的详解与进阶系列一致,我们依然是先挨个讲解camera提供的方法,然后再讲解他们的实际应用。在此之前,我们先讲一些背景知识。先来看一个坐标系:
在前面的matrix中我们讲到过,其实屏幕后方是一个三维坐标系,这个坐标系的y轴正方向是朝上的,z轴是朝里面的,屏幕像一个窗口,我们看到的是窗口外面的物体投射到窗口上的二维镜像。Camera实际上就像我们的眼睛,眼睛看到的是物体投射到窗口上的图形,其实这里就有3个要素,一是物体,二是窗子,三是眼睛,也就是物体,屏幕和camera。最终呈现在用户面前的是屏幕上的图形。影响物体投射到屏幕上的效果,可以移动物体(前面讲解的matrix),也可以移动眼睛(看下面的setLocation方法解析,会有详细讲解)。通过这些不同的操作,最终使得映射在屏幕上的图形不同,然后呈现给用户的也就不同了。
其实camera就是用一种我们很好理解的方式,来简化了图形的变换操作。
2 方法解析
(1) save与
相信在前面的canvas讲解中,大家对这两个方法的名称已经很熟悉了,其实这里的这两个方法跟canvas中基本相同,也是一个保存和恢复,也是成对使用。
(2) translate
public native void translate(float x, float y, float z);
看到translate就知道是平移,这里是沿着3个轴移动物体,经过概述中我们对坐标系的讲解,我们知道了有x,y,z三个坐标轴,所以,这里的参数也是有3个,分别对应了物体在x,y,z三个轴上移动。
但是如果指定了x,y同时也指定了z,那么最终的结果就是x,y移动的距离也会受z影响。
代码如下;
camera.translate(100, 0, 500);
camera.getMatrix(matrix);
canvas.translate(0,1000);