没事自己写的:
package com.zgy.android;
import android.app.Activity;
import android.graphics.Camera;
import android.graphics.Matrix;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.ListView;
public class Transition3d extends Activity implements
AdapterView.OnItemClickListener {
private ListView mPhotosList;
private ViewGroup mContainer;
private ImageView mImageView;
private static final String[] PHOTOS_NAMES = new String[] { "Lyon",
"Livermore" };
private static final int[] PHOTOS_RESOURCES = new int[] {
R.drawable.sample_5, R.drawable.sample_7 };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.animations_main_screen);
mPhotosList = (ListView) findViewById(android.R.id.list);
mImageView = (ImageView) findViewById(R.id.picture);
mContainer = (ViewGroup) findViewById(R.id.container);
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, PHOTOS_NAMES);
mPhotosList.setAdapter(adapter);
mPhotosList.setOnItemClickListener(this);
mPhotosList
.setPersistentDrawingCache(ViewGroup.PERSISTENT_ANIMATION_CACHE);
}
private void applyRotation(View view, int position, float start, float end) {
final float centerX = view.getWidth() / 2.0f;
final float centerY = view.getHeight() / 2.0f;
final Rotate3dAnimation rotation = new Rotate3dAnimation(start, end,
centerX, centerY, 0.0f, true);
rotation.setDuration(500);
rotation.setFillAfter(true);
rotation.setFillEnabled(true);
rotation.setInterpolator(new AccelerateInterpolator());
rotation.setAnimationListener(new DisplayNextView(position));
view.startAnimation(rotation);
}
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
applyRotation(mPhotosList, position, 0, 90);
final float centerX = mContainer.getWidth() / 2.0f;
final float centerY = mContainer.getHeight() / 2.0f;
mImageView.setImageResource(PHOTOS_RESOURCES[position]);
Rotate3dAnimation rotation = new Rotate3dAnimation(0, -90, centerX, centerY, 0, false);
rotation.setFillAfter(true);
rotation.setFillEnabled(true);
rotation.setDuration(0);
mImageView.startAnimation(rotation);
}
private final class DisplayNextView implements Animation.AnimationListener {
private final int mPosition;
private DisplayNextView(int position) {
mPosition = position;
}
public void onAnimationStart(Animation animation) {
}
public void onAnimationEnd(Animation animation) {
mPhotosList.setVisibility(View.GONE);
mImageView.setVisibility(View.VISIBLE);
mContainer.post(new SwapViews());
}
public void onAnimationRepeat(Animation animation) {
}
}
private final class SwapViews implements Runnable {
public void run() {
final float centerX = mContainer.getWidth() / 2.0f;
final float centerY = mContainer.getHeight() / 2.0f;
Rotate3dAnimation rotation = new Rotate3dAnimation(-90, 0, centerX,
centerY, 0, false);
rotation.setDuration(500);
rotation.setFillEnabled(true);
rotation.setFillAfter(true);
rotation.setInterpolator(new AccelerateInterpolator());
mImageView.startAnimation(rotation);
}
}
}
分享到:
相关推荐
在Android开发中,View的3D旋转是一种常用的技术,它能为用户界面带来生动和立体的效果。本篇文章将深入探讨Android中的View 3D旋转,包括基本概念、实现方法、关键API以及实际应用示例。 一、3D旋转基础 在Android...
本文将深入探讨如何在Android中实现View的3D旋转效果。 首先,理解Android的视图系统至关重要。Android中的View是UI的基本构建块,它负责绘制和处理用户交互。要实现3D旋转,我们需要对View的绘制过程有深入的理解...
在Android中,我们可以使用`android.view.animation`包下的`RotateAnimation`类来创建2D旋转动画,但若要实现3D旋转,则需要利用到`android.graphics.Matrix`类和`Camera`类。 `Matrix`类是Android图形系统的基础,...
在Android开发中,3D旋转切换View的效果通常用于创建引人入目的用户界面,比如应用的启动页或者图片浏览组件。这种效果模仿了现实世界中的旋转木马,使得多个视图能够围绕一个中心轴线旋转,用户可以通过手势或按钮...
开发者可以根据需求选择合适的方法和API来实现旋转效果,无论是简单的2D旋转还是复杂的3D旋转,都能为应用增添丰富的视觉体验。在实际编程过程中,还需要注意性能优化,合理利用硬件加速以及避免不必要的重绘,以...
为了实现3D旋转效果,我们首先需要创建一个`View3D`实例,它是所有3D元素的舞台。在MXML中,你可以这样定义: ```xml <mx:View3D id="view3D" width="100%" height="100%"> <!-- 3D内容将放在这里 --> </mx:View3D...
在Android中,实现3D旋转效果的一种方法是通过自定义View或继承现有的View类,比如这里的"gallery"类。Gallery是Android提供的一个可滚动的控件,它允许用户水平滑动浏览一系列的项目。通过扩展Gallery并重写其关键...
另外,"Rotate3D"这个文件可能是包含了一个自定义的`View`或者一个示例项目,用于演示3D旋转效果。如果这个文件是一个Android Studio项目,那么在项目中可能有自定义的动画类、布局文件和相应的触发旋转事件的逻辑。...
1、支持3d旋转。 2、支持自定义旋转。 3、点击3d切换,触摸滑动3d切换 配置view 布局xml里: 代码设置: mLoopRotarySwitchView .setR(300)//设置R的大小 .setAutoRotation(true)//是否自动切换 ....
这段代码将使指定的view在X轴上进行90度的3D旋转,整个过程持续1秒。 为了实现更复杂的3D旋转,我们可能需要结合使用Matrix类来手动计算旋转矩阵,然后更新View的绘制矩阵。这涉及到对3D空间坐标变换的理解,包括...
然而,通过巧妙地运用Canvas和一些数学原理,我们也可以实现3D效果,比如3D旋转木马式的图片展示。这种效果通常用于创建引人入胜的用户界面,使应用更加生动有趣。 3D旋转木马效果涉及到的主要技术点包括: 1. **...
在IT行业中,3D旋转切换View是一种常见的交互设计,它为用户提供了丰富的视觉体验和直观的操作方式,尤其在展示多项目或数据时效果显著。这种效果通常被比喻为“旋转木马”,因为它的动态表现就像旋转木马上依次展示...
首先,理解3D旋转的基本原理。在三维空间中,物体的旋转可以围绕三个轴进行:X轴、Y轴和Z轴。在Qt 3D中,我们可以使用`Qt3DExtras::Qt3DWindow`作为主窗口,然后通过`Entity`对象表示3D场景中的物体,并利用`...
10. **自定义View和动画**:创建3D旋转相册往往需要自定义View,以便实现特定的3D效果和动画逻辑。这可能涉及到重写`onDraw()`方法,使用`Canvas`进行绘图,以及创建自定义动画类。 综上所述,实现“android 3D旋转...
4. **3D效果**:要实现3D旋转,需要设置View的`android:transformPivotX` 和 `android:transformPivotY` 属性,这些属性定义了旋转的中心点。例如,如果你想让View在其自身的中心点旋转,可以这样设置: ```xml ...
在Android开发中,3D旋转效果常常用于提升用户体验,特别是在展示产品或图像时,能带给用户更为生动真实的视觉感受。本教程将通过一个基于Android Studio的3D旋转展示产品的demo来详细讲解如何实现这一功能。 首先...
在Android开发中,3D旋转效果控件是一种增强用户界面体验的重要技术,它能为应用程序带来生动、立体的视觉效果。3D旋转通常涉及到视图的转换和动画,通过使用Android提供的视图动画API或者属性动画API来实现。本文将...
`ObjectAnimator`可以直接操作对象的属性,比如我们可以通过改变`View`的`rotationX`或`rotationY`属性来实现3D旋转。下面是一个简单的`ObjectAnimator`示例: ```java ObjectAnimator rotateAnimation = ...
这个自定义视图会继承自Android的`View`或`ViewGroup`,并在其中实现3D旋转的逻辑。这可能涉及到重写`onDraw()`方法,使用`Canvas`进行绘图,并应用3D旋转矩阵。此外,可能还需要使用`ObjectAnimator`或者`...
此外,模型的自动旋转是通过更新模型视图矩阵(Model-View Matrix)来实现的。在3D图形中,矩阵变换用于定位、缩放和旋转物体。项目可能使用了旋转矩阵,结合时间变量以实现平滑的旋转动画。常见的旋转方式有欧拉角...