Android 简单的3D旋转
来源:互联网 发布:淘宝怎么扫码付款 编辑:程序博客网 时间:2024/05/22 06:51
学习笔记
之前在github中看到一个开源项目,里面使用了一些Animation的知识。因为没有接触过这方面的知识,所以这个星期一直在恶补Animation的知识,其中昨晚解决的一个问题就是实现3D旋转。
在网上找了一些3D旋转的代码,但是里面的内容比较的复杂,我只是想找一个最最简单的例子而已。所以今天就写了以这个最简单的例子,也分享一下我遇到的一些问题把。
首先我写了一个类,继承了Animation,然后只重写了applyTransFormation()方法。
class Rotate3d extends Animation { @Override protected void applyTransformation(float interpolatedTime, Transformation t) { Matrix matrix = t.getMatrix(); Camera camera = new Camera(); camera.save(); camera.rotateY(50 * interpolatedTime); camera.getMatrix(matrix); camera.restore(); }}
好吧,看到了这段代码,一些向我这样Android初学者就会问这么一些列的问题啦:
- applyTransformation()这个方法什么时候被调用的啊
- applyTransformation()方法里面的两个参数是什么含义啊。
- matrix 是什么鬼,拿来干嘛的啊
- camera不是相机么,关3D旋转什么事啊
- save()和restore()又是什么东西啊
好吧,当我最初看到这些代码的时候我就抛出了这么一系列的问题。对于我这种只有一些C语言基础的人,完全不能理解上面代码运行的逻辑啊。
不过,通过我不懈的努力,基本把上面的问题解决了:
applyTransformation()这个方法什么时候被调用的啊
通过重写Animation的applyTransformation(float interpolatedTime, Transformation t)函数来实现自定义动画效果。在绘制动画的过程中会反复的调用applyTransformation函数,每次调用参数interpolatedTime值都会变化,该参数从0渐 变为1,当该参数为1时表明动画结束。(来自网络)
applyTransformation()方法里面的两个参数是什么含义啊。
在第一个问题中说到了interpolatedTime,按照我的理解,interpolatedTime是0 - 1 的值,那么就是动作完成的百分比咯。
Transformation是一个矩阵的封装类,就是用来得到一个Matrix(矩阵)咯,也就是Matrix matrix = t.getMatrix();这句话啦Matrix 是什么鬼,拿来干嘛的啊
对于一个图片变换的处理,需要Matrix类的支持,它位于”android.graphics.Matrix”包下,是Android提供的一个矩阵工具类,它本身不能对图像或View进行变换,但它可与其他API结合来控制图形、View的变换,如Canvas,Camera等。
camera不是相机么,关3D旋转什么事啊
这里使用的Camera是android.graphics.Camera下的类,而我们说的相机是android.hardware.Camera的类喔~~。所以不要混淆啦
save()和restore()又是什么东西啊
其实我写这篇博客主要只是想说说这个两个函数而已,其他的也顺便总结啦。
说说我的理解把,这两个函数顾名思义就是保存和恢复状态呗。但是保存什么,恢复什么呢。
现在我对我上面的代码做一些修改,添加一些输出语句:
protected void applyTransformation(float interpolatedTime, Transformation t) { Matrix matrix = t.getMatrix(); Camera camera = new Camera(); camera.save(); System.out.println(matrix + " strat"); camera.rotateY(50 * interpolatedTime); camera.getMatrix(matrix); System.out.println(matrix + " Rotete"); camera.restore(); camera.getMatrix(matrix); System.out.println(matrix + " restore");}
我对matrix在旋转之前,旋转之后,和restore()分别输出了他们的值,让我们看看结果把:
(这个方法去验证似乎有点问题,因为调用了两次的getMatrix(),然后就没有动画效果了,不知道为什么)
好吧,大概就写到这里,如果有什么问题可以留言喔~~~
- Android 简单的3D旋转
- Android的3D旋转
- Android的3D旋转
- Android的3D旋转
- Animation简单的3D动画旋转
- 3d旋转 android
- Android动画 —— 十几行代码的简单3D旋转动画
- openGL 创建一个旋转的简单的3D模型
- android布局3D旋转
- Android 3D旋转动画
- Android 3D旋转 Layout
- opengl 鼠标3D旋转简单实现
- OpenGL 鼠标3D旋转简单实现
- opengl 鼠标3D旋转简单实现
- Android 随手势进行3D旋转的源码
- Android中ViewPropertyAnimator的使用,硬币3D旋转功能。
- 利用Android的Camera类实现3D旋转功能
- Android——3D旋转变换的动画封装
- Git本地仓库操作
- 零散知识点
- 分享你最喜欢的技巧和提示(Xcode,Objective-C,Swift,C...等等)
- 不讨厌不喜欢的逻辑先生
- 5.Longest Palindromic Substring(59.30%)
- Android 简单的3D旋转
- CSS3 盒子模型(box Model)和边框(border)
- linux c socket之异步IO
- 那些年遇到的js bug
- Git学习——分支详解
- react native组件学习(三)
- Linux下socket异步通讯聊天程序
- GifCam:最佳免费gif动画精细录制/剪辑软件
- poj1275差分约束