★60.自定义控件 ★16.Matrix Camera

Camera常用方法表

方法类别 相关API 简介
基本方法 save、restore 保存、 回滚
常用方法 getMatrix、applyToCanvas 获取Matrix、应用到画布
平移 translate 位移
旋转 rotat (API 12)、rotateX、rotateY、rotateZ 各种旋转
相机位置 setLocation (API 12)、getLocationX (API 16)、getLocationY (API 16)、getLocationZ (API 16) 设置与获取相机位置

基础概念

3D坐标系

Android 采用左手坐标系。

三维投影

三维投影是将三维空间中的点映射到二维平面上的方法。

摄像机

摄像机就是我们观察虚拟3D空间的眼睛。

方法

基本方法

camera.save();        // 保存状态
camera.retore();    // 回滚状态

常用方法

getMatrix

// 计算当前状态下矩阵对应的状态,并将计算后的矩阵赋值给参数matrix。
void getMatrix (Matrix matrix)

applyToCanvas

// 计算当前状态下矩阵对应的状态,并将计算后的矩阵应用到指定的canvas上。
void applyToCanvas (Canvas canvas)

平移

void translate (float x, float y, float z)

旋转

// (API 12) 可以控制View同时绕x,y,z轴旋转,可以由下面几种方法复合而来。
void rotate (float x, float y, float z);

// 控制View绕单个坐标轴旋转
void rotateX (float deg);
void rotateY (float deg);
void rotateZ (float deg);

旋转中心【???】

我们都知道,在2D中,不论是旋转,错切还是缩放都是能够指定操作中心点位置的,但是在3D中却没有默认的方法,如果我们想要让图片围绕中心点旋转怎么办? 这就要使用到我们在Matrix原理提到过的方法:

Matrix temp = new Matrix();        // 临时Matrix变量
this.getMatrix(temp);            // 获取Matrix
temp.preTranslate(-centerX, -centerY);    // 使用pre将旋转中心移动到和Camera位置相同。
temp.postTranslate(centerX, centerY);    // 使用post将图片(View)移动到原来的位置

相机位置

设置相机位置基本可以使用translate替代。

void setLocation (float x, float y, float z); // (API 12) 设置相机位置,默认位置是(0, 0, -8)

float getLocationX ();    // (API 16) 获取相机位置的x坐标,下同
float getLocationY ();
float getLocationZ ();

虚拟相机前后均可以拍摄

View不断接近摄像机并越过摄像机位置时,仍能看到View,并且View大小会随着距离摄像机的位置越来越远而逐渐变小,你可以理解为它有前置摄像头和后置摄像头。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 本篇依旧属于Matrix,主要讲解Camera,Android下有很多相机应用,其中的美颜相机更是不少,不过今天这...
    吕侯爷阅读 4,622评论 0 5
  • 最近发现很多朋友都在找关于runloop的资料,今天有幸总结了一下,希望可以在面试的过程中帮着到你。 runloo...
    best_su阅读 3,118评论 0 4
  • 两天前,我来到哈尔滨,这座即将陪伴我度过大学四年的城市,这四年里,我的家乡于我而言,只有冬夏,再无春秋…...
    阳小旎阅读 2,662评论 4 4
  • 前几天夜班,办公室对面病房的2号床患者已经术后5天了,近5天都是晚上出现发热,这不体温又飙到38度,我去看她...
    王维vivian阅读 1,488评论 0 0