少年郎,是时候打造自己的第一款狂拽酷炫的3D效果了!

简介:

背景介绍

Android中有两个Camera类。一个是android.hardware.Camera,用于对设备的摄像头进行操作。另一个是android.graphics.Camera,可用于进行3D变换,然后把变换后的矩阵Matrix作用于Canvas等,我们本篇要介绍的就是这个Camera类。

玩转Camera

前面我们提到过,Camera是一个能够进行3D变化的类,在进行玩3D变换后,我们能够通过mCamera.getMatrix(Matrix)把变换矩阵Matrix赋值,然后可以用在Canvas上。或者,你可以直接通过mCamera.applyToCanvas(Canvas)直接把变换作用到一个Canvas上。

Android中的三维坐标轴

Android中的三维坐标轴符合左手坐标系。

Camera默认的位置是在(0, 0, -8)点。

Camera的变换操作

方法 说明
getMatrix(mMatrix) 给mMatrix赋值。
applyToCanvas(mCanvas) 将变换获得的Matrix直接作用到mCanvas上。
rotate(x,y,z) 旋转。
rotateX、rotateY、rotateZ 旋转。
getLocationX、getLocationY、getLocationZ 获得Camera的位置,默认是在(0,0,-8)点。
setLocation(x,y,z) 设置camera的位置。
translate(x,y,z) 平移Camera。
save() 与Canvas的类似。
restore() 与Canvas类似。

Camera的方法并不多,所以使用起来也是比较简单明了的。

Camera的使用实例

由于使用Camera的核心就是获得一个变换后的Matrix,所以你需要对Matrix具有一定的认识。

演示Demo1

3D ViewGroup演示

Camera用于自定义动画

直接上个代码实例,用法和前面的例子没什么本质区别,都是通过Camera变换之后获得Matrix矩阵。


  
  
  1. public class Custom3DAnimation extends Animation { 
  2.  
  3.  
  4.     private Camera mCamera; 
  5.  
  6.     private int centerWidth; 
  7.  
  8.     private int centerHeight; 
  9.  
  10.  
  11.     public void setmRotateY(float mRotateY) { 
  12.  
  13.         this.mRotateY = mRotateY; 
  14.  
  15.     } 
  16.  
  17.  
  18.     private float mRotateY; 
  19.  
  20.  
  21.     public Custom3DAnimation() { 
  22.  
  23.         mCamera = new Camera(); 
  24.  
  25.         mRotateY = 90; 
  26.  
  27.     } 
  28.  
  29.  
  30.     @Override 
  31.  
  32.     protected void applyTransformation(float interpolatedTime, Transformation t) { 
  33.  
  34.                 Matrix matrix = t.getMatrix();  //获得Transformation的Matrix 
  35.  
  36.                 mCamera.save();//保存当前镜头状态 
  37.  
  38.         mCamera.rotateY(mRotateY * interpolatedTime); //使相机旋转 
  39.  
  40.         mCamera.getMatrix(matrix); //将旋转变换作用到matrix上 
  41.  
  42.         mCamera.restore(); //合并镜头层 
  43.  
  44.         matrix.preTranslate(centerWidth, centerHeight);//操作前平移 
  45.  
  46.         matrix.postTranslate(-centerWidth, -centerHeight); //操作后平移 
  47.  
  48.  
  49.     } 
  50.  
  51.  
  52.     @Override 
  53.  
  54.     public void initialize(int width, int height, int parentWidth, int parentHeight) { 
  55.  
  56.         super.initialize(width, height, parentWidth, parentHeight); 
  57.  
  58.                 setDuration(5 * 1000); //设置默认持续时间 
  59.  
  60.         setFillAfter(true); //设置动画结束后是否保持状态 
  61.  
  62.         setInterpolator(new LinearInterpolator()); //设置插值器 
  63.  
  64.         centerWidth = width / 2; 
  65.  
  66.                 centerHeight = height / 2; 
  67.  
  68.     } 
  69.  
  70.  

总结

Camera的使用其实并不复杂,只需要记住前面提到的几个方法就行。由于Camera最终是输出一个矩阵,所以还需要对矩阵有一定的掌握。上面我已经给出了矩阵快速使用的指南,大家可以根据情况自行参考。




作者:CoorChice
来源:51CTO
目录
相关文章
|
9月前
|
开发者
找到一个软件著作权源代码材料格式文档生成辅助工具(完全私密,没有代码泄露风险)
截至2023年5月,一款工具已获一万次下载,用户反馈良好。该工具帮助开发者轻松整理软著申请所需的60页源代码,支持多种编程语言,自动处理页眉、页码和格式,减少因格式问题导致的补正。提供《文档鉴别材料》模板和简单两步操作的源代码文档生成器,加快软著注册流程。下载链接包括百度网盘和阿里云盘。
找到一个软件著作权源代码材料格式文档生成辅助工具(完全私密,没有代码泄露风险)
|
关系型数据库 分布式数据库 数据库
沉浸式学习PostgreSQL|PolarDB 8: 电商|短视频|新闻|内容推荐业务(根据用户行为推荐相似内容)、监控预测报警系统(基于相似指标预判告警)、音视图文多媒体相似搜索、人脸|指纹识别|比对 - 向量搜索应用
1、在电商业务中, 用户浏览商品的行为会构成一组用户在某个时间段的特征, 这个特征可以用向量来表达(多维浮点数组), 同时商品、店铺也可以用向量来表达它的特征. 那么为了提升用户的浏览体验(快速找到用户想要购买的商品), 可以根据用户向量在商品和店铺向量中进行相似度匹配搜索. 按相似度来推荐商品和店铺给用户. 2、在短视频业务中, 用户浏览视频的行为, 构成了这个用户在某个时间段的兴趣特征, 这个特征可以用向量来表达(多维浮点数组), 同时短视频也可以用向量来表达它的特征. 那么为了提升用户的观感体验(推荐他想看的视频), 可以在短视频向量中进行与用户特征向量的相似度搜索.
341 0
|
XML Java 开发工具
Android lint配置及使用
Android lint配置及使用
|
XML Android开发 数据格式
【Android 应用开发】Android - TabHost 选项卡功能用法详解
【Android 应用开发】Android - TabHost 选项卡功能用法详解
341 0
【Android 应用开发】Android - TabHost 选项卡功能用法详解
|
机器学习/深度学习 编解码 自然语言处理
Transformer 系列| Transformer又搞事情!TransReID首次在ReID中应用,结果喜人(文末获取论文)(一)
Transformer 系列| Transformer又搞事情!TransReID首次在ReID中应用,结果喜人(文末获取论文)(一)
491 0
Transformer 系列| Transformer又搞事情!TransReID首次在ReID中应用,结果喜人(文末获取论文)(一)
|
前端开发 API Android开发
关于安卓毛玻璃实现(一)动态毛玻璃
关于安卓毛玻璃实现(一)动态毛玻璃
376 0
|
Ubuntu Android开发
Android ImageView 翻转 裁切 缩放
Android ImageView 翻转 裁切 缩放
297 0
Android ImageView 翻转 裁切 缩放
|
XML 定位技术 Android开发
Android 12 小部件详解
Android 12 小部件详解
961 0
Android 12 小部件详解
|
XML API Android开发
Android 12上焕然一新的小组件:美观、便捷和实用(2)
Android 12上焕然一新的小组件:美观、便捷和实用(2)
Android 12上焕然一新的小组件:美观、便捷和实用(2)

热门文章

最新文章