在javaeye里看到了关于3d旋转的文章,可是博主没有透入什么技术细节。由于一直想做出那种旋转效果,所以就想啊想,终于想出来了(
我是个小菜鸟)。呵呵,不管怎样,希望对想做还没做出来的朋友一些帮助。
先上一个效果图:
这是你想要的吗?如果是就继续往下看吧。
其实,这个效果是用animation配合camera做出来的,相信大家在apidemo里面看过类似的。
那么先写一个继承animation的类:Rotate3d
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就好了。(
原来就这么简单啊!无语)
//下面两句很关键哦,呵呵,心照不宣。
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,
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ImageView
android:id="@+id/image1"
android:layout_gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/image1"
/>
<ImageView
android:id="@+id/image2"
android:background="#ffff0000"
android:layout_gravity="center_horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:src="@drawable/image2"
/>
</FrameLayout>
</LinearLayout>
写完收工。如果有不足之处,还请朋友们不吝指教。
分享到:
相关推荐
在"android3D旋转图片"的实例中,我们可能首先需要创建一个ImageView或自定义视图来显示图片,并准备一个Matrix对象来存储变换信息。然后,我们可以使用`Matrix.setRotate()`方法设置旋转角度,这个方法会更新矩阵以...
在Android平台上,开发3D旋转相册是一种提升用户体验和视觉效果的高级技术。"android 3D旋转相册"指的是利用Android SDK中的图形库和动画API来创建一个具有立体感和动态旋转效果的图片浏览应用。这样的相册不仅能够...
在Android开发中,3D旋转屏幕的实现是一个高级特性,它可以为用户带来更生动、更具交互性的体验。本文将深入探讨如何在Android中实现在不同轴上的3D旋转效果,并结合"Rotate3D"这个文件名,我们可以推断这是一个与3D...
在Android开发中,3D旋转是一种常见的动画效果,可以为用户界面增添丰富的视觉体验。本文将深入探讨Android的3D旋转实现方式,包括基础概念、关键API以及如何在实际项目中应用。 首先,理解3D旋转的核心概念是必要...
Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单Android 3D圆形旋转菜单
在Android开发中,3D旋转效果是一种常见的动画技术,它能为用户界面带来生动和立体的感受,提升用户体验。本文将深入探讨如何在Android平台上实现3D旋转效果,并结合`MyRorateViewTest`这个示例项目进行讲解。 一、...
在Android开发中,3D旋转是一种常见的动画效果,可以为用户界面增添丰富的视觉体验。"Android 3D 旋转"通常涉及到OpenGL ES、View动画、属性动画等技术,用于实现类似《Dota2》选择服务器界面那样的立体动态展示。...
在Android开发中,3D旋转效果控件是一种增强用户界面体验的重要技术,它能为应用程序带来生动、立体的视觉效果。3D旋转通常涉及到视图的转换和动画,通过使用Android提供的视图动画API或者属性动画API来实现。本文将...
在本项目中,我们将会探讨如何实现这样一个3D旋转木马的效果。 首先,我们要理解3D旋转的核心概念——`OpenGL ES`。OpenGL ES是Android系统中用于进行2D和3D图形渲染的库,它允许开发者创建复杂的视觉效果。在这个...
要实现3D旋转,我们需要使用`Matrix`类,它是Android提供的数学矩阵工具类,用于处理几何变换。例如,可以使用`Matrix.setRotateM()`方法来设置旋转矩阵,参数包括旋转中心点、旋转角度以及旋转轴。这里,旋转中心点...
3D旋转是Android动画库中的一种高级技巧,通过它可以创建出逼真的立体旋转效果,为用户带来更丰富的视觉体验。 在Android中,自定义动画主要包括两种类型:属性动画(Property Animation)和视图动画(View ...
实现自动旋转的渐变色立方体
本文将深入探讨如何使用OpenGL ES在Android上实现图片的3D旋转。 首先,理解OpenGL ES的基本概念至关重要。OpenGL ES是OpenGL的一个子集,专为嵌入式系统设计,如智能手机和平板电脑。它提供了一个离散的图形编程...
"Android 随手势进行3D旋转的源码"是一个典型的项目,它结合了这两个方面,旨在帮助学生进行毕业设计学习。这个项目可能包含了一系列的类、XML布局文件以及相关的资源文件,用于实现用户手势控制下的3D对象旋转效果...
主要介绍一下如何实现View的3D旋转效果,实现的主要原理就是围绕Y轴旋转,同时在Z轴方面上有一个深入的缩放。 演示的demo主要有以下几个重点: 1,自定义旋转动画 2,动画做完后,重置ImageView
1、支持3d旋转。 2、支持自定义旋转。 3、点击3d切换,触摸滑动3d切换 配置view 布局xml里: 代码设置: mLoopRotarySwitchView .setR(300)//设置R的大小 .setAutoRotation(true)//是否自动切换 ....
总的来说,"android canvas 3D旋转木马 图片立体展示"是一个结合了Android图形编程、动画技术和用户交互的复杂项目。它需要开发者具备扎实的数学基础、良好的编程技巧以及对Android系统理解的深度。通过学习和实践这...
这篇文章主要介绍一下如何实现View的3D旋转效果,实现的主要原理就是围绕Y轴旋转,同时在Z轴方面上有一个深入的缩放。演示的demo主要有以下几个重点: 1,自定义旋转动画 2,动画做完后,重置ImageView 先看一下程序...
本文将深入探讨如何在Android中实现View的3D旋转效果。 首先,理解Android的视图系统至关重要。Android中的View是UI的基本构建块,它负责绘制和处理用户交互。要实现3D旋转,我们需要对View的绘制过程有深入的理解...
在Android开发中,View的3D旋转是一种常用的技术,它能为用户界面带来生动和立体的效果。本篇文章将深入探讨Android中的View 3D旋转,包括基本概念、实现方法、关键API以及实际应用示例。 一、3D旋转基础 在Android...