`

Android系列之浅谈Android 3D旋转

 
阅读更多

在ANDROID中实现3D旋转直接使用animation配合camera就可以实现,在apidemo里就有这样的实例 我们首先做一个继承animation的类Rotate3d.java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 public class Rotate3d extends Animation { private float mFromDegree; private float mToDegree; private float mCenterX; private float mCenterY; private float mLeft; private float mTop; private Camera mCamera; private static final String TAG = "Rotate3d"; public Rotate3d(float fromDegree, float toDegree, float left, float top, float centerX, float centerY) { this.mFromDegree = fromDegree; this.mToDegree = toDegree; this.mLeft = left; this.mTop = top; this.mCenterX = centerX; this.mCenterY = centerY; } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); mCamera = new Camera(); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { final float FromDegree = mFromDegree; float degrees = FromDegree + (mToDegree - mFromDegree) * interpolatedTime; final float centerX = mCenterX; final float centerY = mCenterY; final Matrix matrix = t.getMatrix(); if (degrees <= -76.0f) { degrees = -90.0f; mCamera.save(); mCamera.rotateY(degrees); mCamera.getMatrix(matrix); mCamera.restore(); } else if(degrees >=76.0f){ degrees = 90.0f; mCamera.save(); mCamera.rotateY(degrees); mCamera.getMatrix(matrix); mCamera.restore(); }else{ mCamera.save(); //这里很重要哦。 mCamera.translate(0, 0, centerX); mCamera.rotateY(degrees); mCamera.translate(0, 0, -centerX); mCamera.getMatrix(matrix); mCamera.restore(); } matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } } public class Rotate3d extends Animation { private float mFromDegree; private float mToDegree; private float mCenterX; private float mCenterY; private float mLeft; private float mTop; private Camera mCamera; private static final String TAG = "Rotate3d"; public Rotate3d(float fromDegree, float toDegree, float left, float top, float centerX, float centerY) { this.mFromDegree = fromDegree; this.mToDegree = toDegree; this.mLeft = left; this.mTop = top; this.mCenterX = centerX; this.mCenterY = centerY; } @Override public void initialize(int width, int height, int parentWidth, int parentHeight) { super.initialize(width, height, parentWidth, parentHeight); mCamera = new Camera(); } @Override protected void applyTransformation(float interpolatedTime, Transformation t) { final float FromDegree = mFromDegree; float degrees = FromDegree + (mToDegree - mFromDegree) * interpolatedTime; final float centerX = mCenterX; final float centerY = mCenterY; final Matrix matrix = t.getMatrix(); if (degrees <= -76.0f) { degrees = -90.0f; mCamera.save(); mCamera.rotateY(degrees); mCamera.getMatrix(matrix); mCamera.restore(); } else if(degrees >=76.0f){ degrees = 90.0f; mCamera.save(); mCamera.rotateY(degrees); mCamera.getMatrix(matrix); mCamera.restore(); }else{ mCamera.save(); //这里很重要哦。 mCamera.translate(0, 0, centerX); mCamera.rotateY(degrees); mCamera.translate(0, 0, -centerX); mCamera.getMatrix(matrix); mCamera.restore(); } matrix.preTranslate(-centerX, -centerY); matrix.postTranslate(centerX, centerY); } } 有了这个类一切都会变得简单的,接着只要在activity中写两个Rotate3d的对象,让两个view,分别做这两个对象的animation就好了; 1 2 3 4 5 6 7 8 9 10 11 //下面两句很关键哦, Rotate3d leftAnimation = new Rotate3d(-0, -90, 0, 0, mCenterX, mCenterY); Rotate3d rightAnimation = new Rotate3d(-0+90, -90+90, 0.0f, 0.0f, mCenterX, mCenterY); leftAnimation.setFillAfter(true); leftAnimation.setDuration(1000); rightAnimation.setFillAfter(true); rightAnimation.setDuration(1000); mImageView1.startAnimation(leftAnimation); mImageView2.startAnimation(rightAnimation); 最后就是还要写一下mImageView1,mImageView2的xml, 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

<!--l version="1.0" encoding="utf-8-->

分享到:
评论

相关推荐

    Android的3D旋转

    至于“工具”,Android Studio提供了一系列的调试工具,如Hierarchy Viewer和Layout Inspector,可以帮助开发者可视化和调试3D旋转效果,确保动画在不同设备上表现一致。 总结起来,Android的3D旋转涉及到`Matrix`...

    Android 3D圆形旋转菜单

    Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单

    Android-3D自动旋转的旋转木马

    在Android应用开发中,"Android-3D自动旋转的旋转木马"是一个独特且吸引人的交互元素,通常用于展示一系列图像或卡片,就像真实的旋转木马一样,以3D效果自动旋转。这种控件可以增强用户体验,使得应用程序更加生动...

    android3D旋转图片

    在"android3D旋转图片"的实例中,我们可能首先需要创建一个ImageView或自定义视图来显示图片,并准备一个Matrix对象来存储变换信息。然后,我们可以使用`Matrix.setRotate()`方法设置旋转角度,这个方法会更新矩阵以...

    android-opengl图片3d旋转

    本文将深入探讨如何使用OpenGL ES在Android上实现图片的3D旋转。 首先,理解OpenGL ES的基本概念至关重要。OpenGL ES是OpenGL的一个子集,专为嵌入式系统设计,如智能手机和平板电脑。它提供了一个离散的图形编程...

    Android自定义动画 3D旋转

    3D旋转是Android动画库中的一种高级技巧,通过它可以创建出逼真的立体旋转效果,为用户带来更丰富的视觉体验。 在Android中,自定义动画主要包括两种类型:属性动画(Property Animation)和视图动画(View ...

    Android 随手势进行3D旋转的源码

    Android 随手势进行3D旋转的源码Android 随手势进行3D旋转的源码Android 随手势进行3D旋转的源码Android 随手势进行3D旋转的源码Android 随手势进行3D旋转的源码Android 随手势进行3D旋转的源码Android 随手势进行3D...

    android studio 3d旋转展示产品的demo

    在Android开发中,3D旋转效果常常用于提升用户体验,特别是在展示产品或图像时,能带给用户更为生动真实的视觉感受。本教程将通过一个基于Android Studio的3D旋转展示产品的demo来详细讲解如何实现这一功能。 首先...

    android叠层3D旋转效果

    在Android应用开发中,创建富有视觉吸引力的用户体验是至关重要的,而“android叠层3D旋转效果”就是一种能够提升用户界面(UI)体验的技术。本文将深入探讨如何在Android中实现这种效果,以及它是如何工作的。 ...

    Android真3D 360度旋转 3D特效

    Android3D 360度旋转 3D特效

    Android 图片的3D旋转

    Android图片的3D旋转完整代码,模拟3D的技术方法 Android图片的3D旋转完整代码

    android3d绘图 旋转的正方形

    android3d绘图 旋转的三角形

    Android-Rotate3D是一个3D旋转动画库

    Android开发中的3D旋转动画库,如"Rotate3D",是实现动态视觉效果的重要工具。这个库专门设计用于在Android平台上创建引人入胜、立体感十足的3D旋转动画,极大地丰富了用户界面的交互体验。在移动应用开发中,尤其是...

    Android菜单(3D旋转效果)

    "Android菜单(3D旋转效果)"就是一个实例,展示了如何利用Android的动画框架实现动态、立体的菜单展示效果。在这个项目中,开发者通过编程实现了3D旋转,使用户在打开或关闭菜单时看到一个逼真的3D翻转动画。 首先...

    android自定义3d画廊效果

    2. **矩阵运算**(Matrix):3D画廊的核心在于对图片进行3D旋转,这需要利用Android的Matrix类来完成。Matrix提供了多种矩阵变换操作,如平移、旋转、缩放等,通过巧妙地组合这些操作,可以实现3D空间中的物体运动。...

    Android 滑动效果 3D旋转

    在Android开发中,滑动效果和3D旋转是提升用户界面体验的重要元素,尤其是在移动应用设计中。本文将深入探讨如何使用Animation动画实现Android的3D旋转滑动效果。 首先,Android中的动画主要分为两种类型:Property...

    Android 随手势进行3D旋转的源码-IT计算机-毕业设计.zip

    这个项目可能包含了一系列的类、XML布局文件以及相关的资源文件,用于实现用户手势控制下的3D对象旋转效果。下面将详细讲解这个项目中的关键知识点。 首先,手势识别在Android中主要通过`GestureDetector`和`...

    Iphone与Android 对比分析浅谈

    Iphone与Android 对比分析浅谈(PDF 8页)

    stl的3D模型在Android加载触摸旋转

    自己测试通过小例子,STL格式的3D模型,在Android里面通过触摸旋转的例子

    Android酷炫动画效果之3D星体旋转效果

    Android 3D星体旋转效果实现详解 本文要实现的3D星体旋转效果是从CoverFlow演绎而来,不过CoverFlow只是对图像进行转动,我这里要实现的效果是要对所有的View进行类似旋转木马的转动。在Android中,如果想要实现3D...

Global site tag (gtag.js) - Google Analytics