1个答案 按时间排序 按投票排序
-
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);
}
}
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>
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>
color.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<drawable name="black">#000000</drawable>
<drawable name="white">#FFFFFFFF</drawable>
</resources>2012年2月07日 09:53
相关推荐
为了实现连续的3D切换效果,可能需要使用`AnimatorSet`来组合多个动画。`AnimatorSet`可以按照特定的顺序或同时播放多个动画。例如,如果我们要在第一个动画结束后立即开始第二个动画,可以这样设置: ```java ...
以下是一些关键的XML元素和属性,它们在创建3D图片切换效果时扮演着重要角色: 1. `<ViewFlipper>`:这是Android中的一个布局容器,可以用来实现动画效果,比如图片的3D翻转。通过设置适当的动画持续时间和动画类型...
"Android 3D图片轮播"是一个高级的Android控件,它为开发者提供了一种独特的方式来展示图片,通过3D转换效果增加用户体验。这种3D轮播器通常用于应用的启动页、产品展示或者广告展示等场景,能够使用户的界面更加...
首先,ViewPager是Android SDK中的一个强大视图容器,它允许用户通过左右滑动来切换不同的页面,通常用于实现页面间的平滑过渡,如在应用的主界面或图片浏览场景中。在3D画廊效果中,我们不仅需要展示多个页面,还要...
首先,我们要理解3D图片轮播器的核心特性。在2D平面上实现3D效果通常涉及视图的旋转和平移。在Android中,我们可以利用`Matrix`类来处理几何变换,通过设置`matrix.postRotate()`方法来实现旋转,`matrix....
"Android 自定义 ViewPager 打造千变万化的图片切换效果"这个主题,主要是探讨如何通过扩展Android的ViewPager或者使用像Jazzy ViewPager这样的第三方库,来创建更具视觉吸引力的图片滑动体验。 首先,自定义...
然而,通过巧妙地运用Canvas和一些数学原理,我们也可以实现3D效果,比如3D旋转木马式的图片展示。这种效果通常用于创建引人入胜的用户界面,使应用更加生动有趣。 3D旋转木马效果涉及到的主要技术点包括: 1. **...
每个Item对应一个自定义的View,通过调整View中的图片索引,实现图片的切换效果。 4. **动画效果**:为了更接近Mac QQ音乐的效果,可以添加过渡动画。比如,可以使用ObjectAnimator或ValueAnimator实现图片淡入淡出...
在Android开发中,3D图片反转是一种常见的动画效果,它能为用户界面带来生动和立体的感受。本篇文章将深入探讨如何在Android中实现这个功能,包括基本原理、关键技术和实战步骤。 首先,3D图片反转的实现基于...
要实现3D图片切换,我们需要对Camera进行深度控制和视角变换。 1. **设置布局**: 创建一个可以容纳多张图片的布局,例如使用`ImageView`数组或`ViewFlipper`组件。每张图片都是一个独立的`ImageView`,它们可以并排...
综上所述,Android视频无缝切换和图片花式切换涉及了缓冲策略、时间同步、渲染技术、动画效果和性能优化等多个方面,开发者需要对Android系统有深入理解,并掌握相关API的使用,才能实现高质量的用户体验。
"android 3D旋转相册"指的是利用Android SDK中的图形库和动画API来创建一个具有立体感和动态旋转效果的图片浏览应用。这样的相册不仅能够展示图片,还可以通过3D翻转效果增加互动性和趣味性。 在实现3D旋转相册的...
本示例是一个高级版本的3D图片轮播器,它不仅提供了基本的图片切换功能,还增加了视觉上的立体效果,提升了用户体验。下面将详细探讨这个3D版的图片轮播器Demo所涉及的技术点和实现原理。 1. **3D翻转效果** - 在...
"MyGalleryImgaSwitch"是一个专为此目的设计的库,它实现了图片切换时的3D翻转效果。接下来,我们将深入探讨这个源码中的关键知识点。 1. **自定义View**: "MyGalleryImgaSwitch" 是一个自定义的View,继承自...
添加过渡效果,使图片切换更为自然。 3. 兼容性处理:考虑到不同设备的性能差异,需要适当调整3D效果的复杂度,确保在低端设备上也能流畅运行。 总结,Gallery3D是Android开发中一种创新的图片展示方式,通过3D滚动...
本项目“Android高级图片滚动控件,3D版的图片轮播器Demo”专注于提供一种独特且引人入胜的3D图片展示方式,让用户能够更加沉浸地浏览图片。 首先,我们要理解3D图片轮播器的核心概念。在传统的2D轮播器基础上,3D...
这个"Android 3D相册图片滑动+倾斜+放大+倒影处理源码"提供了实现此类高级视觉效果的方法。下面将详细探讨这个源码中的关键知识点。 1. **3D相册效果**:此源码实现了3D翻转效果,让用户在浏览相册时仿佛在操作真实...
在Android开发中,3D翻转效果是一种常见的动画过渡手段,可以为用户界面带来生动而富有立体感的视觉体验。这种效果通常应用于Activity之间的切换,使得应用的交互更加吸引人。本文将深入探讨如何实现Android的3D翻转...
在Android开发中,创建一个具有视觉吸引力的3D相册是一项挑战,但通过巧妙地结合各种技术,可以实现像标题中描述的那样——3D相册图片滑动、倾斜、放大以及倒影处理。这个源码项目正是为了解决这个问题,提供了一种...