Roate3dAnimation 实现了围绕y轴竖直方向 或者绕x轴方向旋转的3d动画效果。这个例子来

自Android APIDemo中的一个自定义View动画。他的实现展示自定义View动画的基本步骤。

主要是重写initialize方法,applyTransformation方法。

分析:

在Roate3dAnimation中,我们使用Android.graphic.Camera实现3d效果。

对Camera不熟悉的可看看 android.graphic.Camera 。

public classRotate3dAnimationextendsAnimation {

//开始角度

private floatstartDegree;

//结束角度

private floatendDegree;

/**

* 这个旋转动画围绕在2D空间的中心点执行.你可以用X轴坐标(叫做centerX)和Y轴(叫做centerY)

* 坐标来定义这个中心点

*/

private floatcenterX;

private floatcenterY;

/**

* 控制镜头景深,不需要的话给0值即可

* mReverse 为true,表示反方向,false 表示正方向

*/

private floatdeepZ;

private booleanmReverse;

//用于辅助实现3d效果。

privateCameramCamera;

//X轴方向,或Y轴方向

enumDIRECTION {

X,Y

}

DIRECTIONdirection= DIRECTION.Y;

Rotate3dAnimation(floatfromDegree,floattoDegree,floatcenterX,

floatcenterY,floatdeepZ,booleanreverse) {

this.startDegree= fromDegree;

this.endDegree= toDegree;

this.centerX= centerX;

this.centerY= centerY;

this.deepZ= deepZ;

this.mReverse= reverse;

}

Rotate3dAnimation(floatfromDegree,floattoDegree,floatcenterX,

floatcenterY,floatdeepZ,booleanreverse, DIRECTION direction) {

this.startDegree= fromDegree;

this.endDegree= toDegree;

this.centerX= centerX;

this.centerY= centerY;

this.deepZ= deepZ;

this.mReverse= reverse;

this.direction= direction;

}

@Override

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

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

mCamera=newCamera();

}

@Override

protected void applyTransformation( float int erpolatedTime, Transformation t) {

super.applyTransformation(interpolatedTime, t);

float fromDegree =startDegree;

float degree = fromDegree + (endDegree-startDegree) * interpolatedTime;

finalMatrix matrix = t.getMatrix();

mCamera.save();

if(mReverse) {

mCamera.translate(0, 0, deepZ* interpolatedTime);

}else{

mCamera.translate(0, 0, deepZ* (1- interpolatedTime));

}

if(direction== DIRECTION.Y) {

mCamera.rotateY(degree);

}else{

mCamera.rotateX(degree);

}

mCamera.getMatrix(matrix);

mCamera.restore();

matrix.preTranslate(-centerX, -centerY);

matrix.postTranslate(centerX,centerY);

}

}

应用:

iv_content.post(new Runnable() {

@Override

public void run() {

Rotate3dAnimation rotate3dAnimation = new Rotate3dAnimation(0, 360, iv_content.getWidth()/2,

0, 0, true, Rotate3dAnimation.DIRECTION.Y);

rotate3dAnimation.setDuration(3000);

iv_content.setAnimation(rotate3dAnimation);

rotate3dAnimation.start();

}

});

原文链接:

android3d动画的实现,【转】Android 实现3d动画旋转效果相关推荐

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

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

  2. android动画放大后缩小,Android 补间动画 scale(缩放)

    今天又遇到了关于Android 动画方面的问题,免不了一番疯狂找资料,所幸解决了自己的问题,为了避免以后遇到同样的问题,再次到处找资料,于是决定写篇随笔记录下来,方便自己方便大家^_^:废话就不说了先 ...

  3. ae制h5文字动画_大杀器Bodymovin和Lottie:把AE动画转换成HTML5/Android/iOS原生动画

    前段时间听部门老大说,Airbnb出了个移动端的动画库Lottie,可以和一个名叫Bodymovin的AE插件结合起来,把在AE上做好的动画导出为json文件,然后以Android/iOS原生动画的形 ...

  4. android 2048 动画,大杀器Bodymovin和Lottie:把AE动画转换成HTML5/Android/iOS原生动画

    前段时间听部门老大说,Airbnb出了个移动端的动画库Lottie,可以和一个名叫Bodymovin的AE插件结合起来,把在AE上做好的动画导出为json文件,然后以Android/iOS原生动画的形 ...

  5. android 实现3d动画,安卓3d动画的简单实现1

    Android中并没有提供直接做3D翻转的动画,所以关于3D翻转的动画效果需要我们自己实现.这里我列举一个最简单翻转动画的例子. 创建一个activity,布局就用最简单的,里面放一个textView ...

  6. 3d动画 android,绅士动画 – 【安卓+PC】【3D动画】Oreo大师神级新作

    实际内容比预览图画质更好,哥布林警告,之前非动画作品是4K 每日报: Switch模拟器Yuzu现已成功模拟<动物森友会> 上个月,Switch模拟器Ryujinx就已经成功运行<动 ...

  7. android动画制作方法,在Android中制作动画的推荐方法

    我在网上搜索了更多有关在Android中为角色设置动画的信息,但并没有完全理解它.我在这里问,也许您可​​以给我一些建议或提示,以实现最佳效果. 情境 想象一下5个绘制的字符(比方说5个人头).我需要 ...

  8. android 三维动画效果,9款令人惊叹的HTML5 3D动画应用

    原标题:9款令人惊叹的HTML5 3D动画应用 之前我们已经向大家分享了很多HTML5动画应用了,大部分都非常炫酷,也有一小部分是很实用的.今天我们要向各位HTML5动画爱好者介绍更多的HTML5 3 ...

  9. Android中的动画详析-kotlin的demo

    Android中的动画可以分为三种,View动画,帧动画,以及属性动画,实际上帧动画也是View动画的一种,只不过二者表现形式不同,View动画是通过不断地对场景里的动画做图像转换从而产生动画效果是一 ...

最新文章

  1. 服务器系统都是64位的吗,云服务器32位跟64位的区别吗
  2. python单词大全-python词汇大全
  3. 【Android 应用开发】Activity 返回堆栈清除操作 ( 默认状态 | 清除返回堆栈配置 | 不清除返回堆栈配置 | 清除指定界面配置 )
  4. 归档程序错误。在释放之前仅限于内部连接
  5. Git 查看提交历史
  6. pyqt stop停止线程_面试官:如何终止线程?有几种方式?
  7. 建立ssh无密码登录环境
  8. insert sort
  9. 特斯拉已撤回德国电池工厂建厂补贴申请 原有望获得近13亿美元
  10. 我只注视你全cg存档_在暴戾的他怀里撒个娇 作者:春风榴火全娱乐圈都在等我们离婚作者:魔安...
  11. python符号大全_python吊打Excel?屁!那是你不会用!
  12. uos系统虚拟机_UOS开箱体验
  13. ANDROID L——Material Design详解(UI控件)
  14. jQuery 图片轮播插件–GalleryView
  15. 【总结】学堂云慕课-如何写好科研论文
  16. NXP恩智浦单片机Keil5环境下编程
  17. python 广告联盟_利用京东联盟API获取自定义推广链接
  18. 接口测试 requests的身份认证方式
  19. 官方精简版Windows10:微软自己都看不过去了
  20. POJ 1635 Subway tree systems 树的Hash 或 树的最小表示法

热门文章

  1. 隔离运放AMC1311的使用
  2. 详解NTPD工作原理
  3. 快速掌握EasyExcel在web场景中的应用(读和写)
  4. 乐视网今日复盘;百度副总裁邬学斌离职;iPhone X出货2900万部丨价值早报
  5. 做跨境电商还不会这些技术和能力?那你要进来补课了
  6. 每日言论:『恐惧来自未知』
  7. 摩尔斯电码(morse)转换英文字符串c语言代码
  8. 摩根大通数字化转型启示录:五大措施奠定下一代零售银行基石
  9. python爬虫登陆教程_(python模拟登陆教程)python爬虫模拟登录是什么意思
  10. Animator功能