`

Layout之间3D切换效果Demo

阅读更多
先上个效果图(跟自己Blog中的浏览图片的代码类似,不过是layout之间切换)

相信这个效果很多人都需要,现在共享在这里供大家学习:
1.Layout3D.java
package cn.com;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

public class Layout3D extends Activity {

	private int mCenterX = 160;
	private int mCenterY = 0;
	private ViewGroup layout1;
	private ViewGroup layout2;

	private Rotate3d leftAnimation;
	private Rotate3d rightAnimation;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		initFirst();

		layout1 = (ViewGroup) findViewById(R.id.layout1);
		Button b1 = (Button) findViewById(R.id.button1);
		b1.setEnabled(true);
		b1.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				leftMoveHandle();
				v.setEnabled(false);
			}
		});
	}
	
	public void initFirst(){
		leftAnimation = new Rotate3d(0, -90, 0.0f, 0.0f, mCenterX, mCenterY);
		rightAnimation = new Rotate3d(90, 0, 0.0f, 0.0f, mCenterX, mCenterY);
		leftAnimation.setFillAfter(true);
		leftAnimation.setDuration(1000);
		rightAnimation.setFillAfter(true);
		rightAnimation.setDuration(1000);
	}
	
	public void initSecond(){
		leftAnimation = new Rotate3d(-90, 0, 0.0f, 0.0f, mCenterX, mCenterY);
		rightAnimation = new Rotate3d(0, 90, 0.0f, 0.0f, mCenterX, mCenterY);
		leftAnimation.setFillAfter(true);
		leftAnimation.setDuration(1000);
		rightAnimation.setFillAfter(true);
		rightAnimation.setDuration(1000);
	}

	public void jumpToLayout1(Rotate3d leftAnimation) {
		setContentView(R.layout.main);

		layout1 = (ViewGroup) findViewById(R.id.layout1);
		layout1.startAnimation(leftAnimation);

		Button b1 = (Button) findViewById(R.id.button1);
		b1.setEnabled(true);
		b1.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				leftMoveHandle();
			}
		});
	}

	public void jumpToLayout2(Rotate3d rightAnimation) {
		setContentView(R.layout.mylayout);
		layout2 = (ViewGroup) findViewById(R.id.layout2);
		layout2.startAnimation(rightAnimation);

		Button b2 = (Button) findViewById(R.id.button2);
		b2.setEnabled(true);
		b2.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				rightMoveHandle();
			}
		});
	}

	public void leftMoveHandle() {
		initFirst();
		layout1.startAnimation(leftAnimation);
		jumpToLayout2(rightAnimation);
	}

	public void rightMoveHandle() {
		initSecond();
		layout2.startAnimation(rightAnimation);
		jumpToLayout1(leftAnimation);
	}
}


2.Rotate3d.java
package cn.com;

import android.graphics.Camera;
import android.graphics.Matrix;
import android.view.animation.Animation;
import android.view.animation.Transformation;

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);
	}
}



3.main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent"
	android:id="@+id/layout1" android:layout_height="fill_parent"
	android:background="@drawable/black" xmlns:android="http://schemas.android.com/apk/res/android">
	<Button android:id="@+id/button1" android:layout_width="118px"
		android:layout_height="wrap_content" android:text="Go to Layout2">
	</Button>
	<TextView android:id="@+id/text1" android:textSize="24sp"
		android:layout_width="186px" android:layout_height="29px"
		android:text="@string/layout1" android:layout_below="@+id/button1"></TextView>
</RelativeLayout>

4.mylayout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="fill_parent"
	android:id="@+id/layout2" android:layout_height="fill_parent"
	android:background="@drawable/white" xmlns:android="http://schemas.android.com/apk/res/android">
	<Button android:id="@+id/button2" android:layout_width="118px"
		android:layout_height="wrap_content" android:text="Go to Layout1">
	</Button>
	<TextView android:id="@+id/text2" android:textSize="24sp"
		android:layout_width="186px" android:layout_height="29px"
		android:textColor="@drawable/black" android:text="@string/layout2"
		android:layout_below="@+id/button2">
	</TextView>
</RelativeLayout>
  • 大小: 20.5 KB
分享到:
评论
3 楼 andliy 2011-02-25  
楼主V5 学习了!
2 楼 crazier9527 2010-12-07  
谢谢分享~
1 楼 edison_cool911 2010-07-26  
<?xml version="1.0" encoding="utf-8"?>
  <resources>
    <drawable name="black">#000000</drawable>
    <drawable name="white">#FFFFFFFF</drawable>
  </resources>
这个是color.xml没附上

相关推荐

    iOS倒计时翻页效果 demo

    5. **布局与响应式设计**: 为了适应不同屏幕尺寸和设备方向,开发者需要考虑Auto Layout或Size Classes来确保翻页效果在各种设备上都能正确显示。同时,还要处理手势识别,比如滑动来手动切换时间页面。 6. **编程...

    Unity3D中实现3D照片墙

    可以利用GridLayoutGroup或者GridLayoutManager来布局这些Image组件,使其在界面上以3D效果排列。 3. 光照处理:为了使照片看起来更真实,需要考虑光照的影响。Unity3D提供了多种光源类型,如Directional Light...

    UGUI 官方demo

    4. **GridLayout Group** 和 **Flexbox Layout Group**:布局管理器,用于自动排列UI元素。 5. **Scroll View**:滚动视图,用于展示大量内容。 通过研究这些示例,开发者不仅可以掌握UGUI的基本使用,还能了解如何...

    Unity UGUI 官方示例 Demo

    5. **布局系统**:Unity UGUI提供了多种布局组(Layout Group),如Horizontal Layout Group和Vertical Layout Group,可以自动管理子元素的排列方式,实现网格布局、列表布局等效果。 6. **CanvasScaler**:这个...

    IOS应用源码Demo-很炫的翻页效果-毕设学习.zip

    通过设置其数据源(datasource)和代理(delegate),我们可以控制翻页的方向、页面数量以及如何在页面之间切换。 然而,"很炫的翻页效果"可能不仅仅局限于UIPageViewController的标准实现。为了达到更个性化的效果...

    内含3个demo,2个循环UI列表,1个滑动翻页支持自定义选项数量,按钮切换,鼠标滑动切换 ,当前项框选提示,选项缩放等功能

    在Unity中,可以使用`ScrollRect`组件配合适当的布局组(如`HorizontalLayoutGroup`或`VerticalLayoutGroup`)来创建这样的效果。 2. **滑动翻页**: 滑动翻页功能是UI设计中常见的元素,特别是在展示多页内容时。...

    swift的界面搭建 和 轮播图的demo

    轮播图的动画效果可以通过修改frame或使用CATransform3D来实现平滑的过渡。还可以添加自动轮播功能,通过定时器每隔一段时间触发滚动。 总的来说,Swift的界面搭建提供了丰富的工具和灵活性,无论是使用Interface ...

    NGUI图文混排demo

    NGUI图文混排的实现是其核心特性之一,它允许开发者在界面上灵活地组合文字和图像,创造出各种复杂的布局效果。下面将详细探讨NGUI图文混排的相关知识点。 1. **NGUI概述**: NGUI(Natural GUI)是由Tasharen ...

    Android动画Demo中

    逐帧动画在Android中通过`AnimationDrawable`类来实现,它是一个可绘制对象,可以作为视图背景,每帧是一张图片,通过连续切换这些图片来创建动画效果。首先,我们需要准备一系列的图片资源,通常命名为如"frame1....

    史上最全的ios开发源码

    视图切换类-3D浏览器 视图切换类--zaker应用进入画面效果 视图切换之视图切换大小渐变效果 手势交互--物体根据重力感应运动 手势交互之Drag View 手势交互之Touch Visualizer 图表类 图表--百分比圆环 图表类--...

    UGUI 官方资源包

    6. Layout Components:如RectTransform、GridLayoutGroup、HorizontalLayoutGroup和VerticalLayoutGroup,用于布局管理,帮助自动调整UI元素的位置和大小。 7. Event System:负责处理用户输入,如鼠标点击、触摸...

    JazzyViewPager加FragmentTabHost实现多样式滑动App的基本布局

    这些动画包括3D翻转、旋转、平移等,使用户在切换页面时感受到更生动的视觉体验。要使用`JazzyViewPager`,我们需要在项目中引入它的依赖。这通常通过在`build.gradle`文件中添加对应的`maven`或`jcenter`仓库URL,...

    cocos学习资料

    Cocos2d-x是一款强大的开源游戏开发框架,广泛应用于2D和3D游戏的制作,尤其在移动平台如iOS、Android以及Windows Phone上表现突出。它基于C++,提供了多种编程语言接口,包括C++、Lua和JavaScript,使得开发者可以...

    android开发资料大全

    Android3D游戏开发付费视频教程共享(更新第四集) 史上最全示例Android教学视频,非常值得观看 Android游戏开发系列源码+CHM+书籍截图+目录】 Android developer guide中文翻译文档 Android开发开发技巧之 EditText...

    Visual C++ 编程资源大全(英文源码 表单)

    1,01.zip MFC Extension Library MFC扩展界面库, 使用Visual C++ 6.0(15KB)&lt;END&gt;&lt;br&gt;2,02.zip Visual Studio style UI Visual Studio风格的界面效果(15KB)&lt;END&gt;&lt;br&gt;3,03.zip Internet Explorer 4 ...

Global site tag (gtag.js) - Google Analytics