在Android中,可以使用android.graphics.Camera这个类进行3D变换

之前更改CameraUI的时候,需要做一个切换前后摄像头的翻转动画,刚开始在网上着了一些翻转动画的代码,合到自己的代码之后,发现并没有达到自己想要的效果,为此纠结了很久,后来凑巧把几份Demo代码揉杂在一起,突然发现达到了理想效果。。晕,逐行阅读代码,原因还是细节处理问题--呵呵

下面贴出关键代码

public class FlipAnimation extends Animation {

private Camera mCamera;

private float centerX;

private float centerY;

private float scale = 0.5f;

public FlipAnimator() {

}

@Override

public void initialize(int width, int height, int parentWidth, int parentHeight) {

super.initialize(width, height, parentWidth, parentHeight);

// 初始化Camera,并得View X和Y轴的中心点坐标

mCamera = new Camera();

centerX = width / 2;

centerY = height / 2;

}

@Override

protected void applyTransformation(float interpolatedTime, Transformation t) {

final double radians = Math.PI * interpolatedTime;

float degrees = (float) (180.0 * radians / Math.PI);

if (interpolatedTime >= 0.5f) {

degrees -= 180.f;

}

//利用Matrix 对view进行平移,缩放等变换

final Matrix matrix = t.getMatrix();

camera.save();

// 根据动画播放进度,在Z轴方向进行平移,达到先远离屏幕,在靠近屏幕的效果

camera.translate(0.0f, 0.0f, (float) (300.0 * Math.sin(radians)));

// 围绕X轴进行旋转

camera.rotateX(degrees);

// 围绕Y轴进行旋转,此处是实现上下翻转,因此不要Y轴变换

//camera.rotateY(degrees);

//围绕Z轴进行旋转,此处是实现上下翻转,因此不要Z轴变换

//camera.rotateZ(degrees);

camera.getMatrix(matrix);

camera.restore();

// 下面两行代码是设置旋转中心点为图像正中

matrix.preTranslate(-centerX, -centerY);

matrix.postTranslate(centerX, centerY);

// 对图像进行缩放

matrix.preScale(scale, scale, centerX, centerY);

}

}

由于我需要翻转的是整个屏幕界面,仅仅是上下翻转,会导致翻转的时候上半部分或下半部分超出屏幕(根据动画的方向决定:从上至下/从下至上),动画看起来会很奇怪,因此最重要的是要加上缩小和Z轴平移效果

camera.translate(0.0f, 0.0f, (float) (300.0 * Math.sin(radians)));

matrix.preScale(scale, scale, centerX, centerY);

将View缩在屏幕范围内进行3D变换,看起来perfect(貌似你们看不到,哈哈)

使用动画的方法就简单了

view.startAnimation(new FlipAnimation())就可以了

android camera 动画,Android 使用Camera创建3D动画相关推荐

  1. CSS3新增属性——过渡和动画(2D属性,3D动画)

    目录 CSS3 一.过渡 1. 属性 2. 花费时间 3. 运动曲线 4. 何时开始 二.2D属性 2. translate(移动) 2. rotate(旋转) 3.  scale(缩放) 4. tr ...

  2. 3dmax和python做3d动画_Autodesk 3ds Max 2015(3D动画制作3dsmax2015)官方中文版下载 - 下载吧...

    3dsmax2015官方中文版(3dsmax2015)能够为用户提供强大且即购即用的专业级3D动画创建功能,3dsmax2015具有用于3D建模.动画.模拟和渲染的创意工具集,可帮助游戏.电影和运动图 ...

  3. 如何用python制作三维动画_用Python制作3D动画

    很多小伙伴可能不知道,在3D动画甚至电影制作的过程中,Python也在其中扮演了很重要的角色呢! 比如皮克斯的动画片一般使用Maya软件制作,并且流程中使用到了大量的Maya Python插件. 另外 ...

  4. 关于动画的几种状态表示的含义以及能够使用2d动画表述为什么要使用3d动画表述

    transform 四种转换 translate 位置 scale 缩放 rotate 旋转 skew 倾斜 以上四种转换方式是比较特殊的,其实他们都是由matrix 矩阵转换来: animation ...

  5. css定格动画_使用StopGo创建定格动画

    css定格动画 上个月,我们用Krita观看了数字单元动画 . 不过,单元动画只是一种动画,因此本月我们将看一下定格动画. 作为一项附加功能,由于过去几周重点介绍了DIY项目,因此该应用程序产生的动画 ...

  6. 用python做flash动画_6 款用于创建优秀动画的免费 Flash 编辑器

    Sothink SWF Quicker是一款功能完备简单易用的Flash动画制作软件,具有美观易用的用户界面,可以快速的制作出SWF动画,程序默认具有4个浮动的面板,通过他们你可以对所制作的电影或者动 ...

  7. python 怎么实现3d 动画_python – 使用matplotlib的3D动画

    我用了这个例子 http://matplotlib.org/1.4.1/examples/animation/simple_3danim.html 并修改了你的代码: from matplotlib ...

  8. Android 动画介绍及自定义3D动画效果的基本使用

    导语 Android的动画框架包括帧动画.视图动画(又叫补间动画).属性动画.在Android3.0之前,视图动画一家独大,但随之后属性动画框架被推出.相比属性动画,视图动画一个非常大的缺陷就是不具备 ...

  9. android开发骰子动画,GitHub - jieyou/dice: 一个css3 3d动画效果的色子(或称骰子?)...

    dice -- 3d色子(或称骰子?) 一个css3 3d动画效果的色子 完全效果(完全流畅的3d动画.阴影.圆角):Chrome\Firefox\Safari\iOS Safari 6.0+\And ...

最新文章

  1. sass的继承,混合宏,占位符的用法总结
  2. Hibernate学习笔记--核心编程
  3. C语言orders order订单的算法(附完整源码)
  4. (*长期更新)软考网络工程师学习笔记——Section 5 数据链路层
  5. 迈向数据科学的第一步:在Python中支持向量回归
  6. python大神的成长之路_我的Python成长之路
  7. django+nginx+uwsgi项目部署文档整理
  8. mysqlserver输入密码后闪退_iOS降级教程:iOS 14 后如何降级到ios13?
  9. mysql外键可以是空吗_带外键的表列可以为NULL吗?
  10. Wireshake抓包数据怎么看(一)
  11. flink知识点总结
  12. 2008 iis php mysql_2008服务器配置iis7+php+mysql
  13. .Net平台下安装DotNetBar
  14. 联想本装系统stop:0X000007B错误[转]
  15. Unity HDR (高动态范围 )
  16. WEB通信之 长连接、长轮询(long polling)
  17. 烟大计算机考研二战,以坚持铺就考研之路——记经济管理学院考研优秀个人程林林...
  18. 香港银行账户被关,应如何取走余额
  19. php条件 效率高,PHP高效率写法
  20. nginx设置域名跳转另一个域名

热门文章

  1. 刷新所有视图存储过程
  2. poj 3414 Pots(广搜BFS+路径输出)
  3. micro 架构组件介绍
  4. 阅读笔记 火球UML大战需求分析4
  5. 移动端上传照片 预览+Draw on Canvas's Demo(解决 iOS 等设备照片旋转 90 度的 bug)...
  6. 从博客园迁移到自己用Hexo搭的博客
  7. xcode 插件安装路径
  8. Spring源码追踪3——AOP机制
  9. 字符串 不是有效的 AllXsd 值。
  10. linuxpython23同时_Linux-centos同时存在Python2-Python3