0 0

Android 3D图片切换的效果3

就像下面的图片切换效果一样,带有阴影

 一张图片在左侧,一张图片在右侧,一张图片在中间,可以切换来着

2012年2月06日 17:46
  • 大小: 28 KB

1个答案 按时间排序 按投票排序

0 0

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切换动画效果

    为了实现连续的3D切换效果,可能需要使用`AnimatorSet`来组合多个动画。`AnimatorSet`可以按照特定的顺序或同时播放多个动画。例如,如果我们要在第一个动画结束后立即开始第二个动画,可以这样设置: ```java ...

    图片切换3D效果

    以下是一些关键的XML元素和属性,它们在创建3D图片切换效果时扮演着重要角色: 1. `&lt;ViewFlipper&gt;`:这是Android中的一个布局容器,可以用来实现动画效果,比如图片的3D翻转。通过设置适当的动画持续时间和动画类型...

    Android 3D图片轮播.zip

    "Android 3D图片轮播"是一个高级的Android控件,它为开发者提供了一种独特的方式来展示图片,通过3D转换效果增加用户体验。这种3D轮播器通常用于应用的启动页、产品展示或者广告展示等场景,能够使用户的界面更加...

    Android-Android使用ViewPager打造3D画廊效果

    首先,ViewPager是Android SDK中的一个强大视图容器,它允许用户通过左右滑动来切换不同的页面,通常用于实现页面间的平滑过渡,如在应用的主界面或图片浏览场景中。在3D画廊效果中,我们不仅需要展示多个页面,还要...

    Android高级图片滚动控件,3D版的图片轮播器Demo

    首先,我们要理解3D图片轮播器的核心特性。在2D平面上实现3D效果通常涉及视图的旋转和平移。在Android中,我们可以利用`Matrix`类来处理几何变换,通过设置`matrix.postRotate()`方法来实现旋转,`matrix....

    Android 自定义 ViewPager 打造千变万化的图片切换效果

    "Android 自定义 ViewPager 打造千变万化的图片切换效果"这个主题,主要是探讨如何通过扩展Android的ViewPager或者使用像Jazzy ViewPager这样的第三方库,来创建更具视觉吸引力的图片滑动体验。 首先,自定义...

    android canvas 3D旋转木马 图片立体展示

    然而,通过巧妙地运用Canvas和一些数学原理,我们也可以实现3D效果,比如3D旋转木马式的图片展示。这种效果通常用于创建引人入胜的用户界面,使应用更加生动有趣。 3D旋转木马效果涉及到的主要技术点包括: 1. **...

    Android 图片叠加banner效果 仿mac QQ音乐图片轮播

    每个Item对应一个自定义的View,通过调整View中的图片索引,实现图片的切换效果。 4. **动画效果**:为了更接近Mac QQ音乐的效果,可以添加过渡动画。比如,可以使用ObjectAnimator或ValueAnimator实现图片淡入淡出...

    android 3d图片反转

    在Android开发中,3D图片反转是一种常见的动画效果,它能为用户界面带来生动和立体的感受。本篇文章将深入探讨如何在Android中实现这个功能,包括基本原理、关键技术和实战步骤。 首先,3D图片反转的实现基于...

    图片的切换效果

    要实现3D图片切换,我们需要对Camera进行深度控制和视角变换。 1. **设置布局**: 创建一个可以容纳多张图片的布局,例如使用`ImageView`数组或`ViewFlipper`组件。每张图片都是一个独立的`ImageView`,它们可以并排...

    Android 视频无缝切换&&图片花式切换

    综上所述,Android视频无缝切换和图片花式切换涉及了缓冲策略、时间同步、渲染技术、动画效果和性能优化等多个方面,开发者需要对Android系统有深入理解,并掌握相关API的使用,才能实现高质量的用户体验。

    android 3D旋转相册

    "android 3D旋转相册"指的是利用Android SDK中的图形库和动画API来创建一个具有立体感和动态旋转效果的图片浏览应用。这样的相册不仅能够展示图片,还可以通过3D翻转效果增加互动性和趣味性。 在实现3D旋转相册的...

    Android高级图片滚动控件,3D版的图片轮播器Demo.zip

    本示例是一个高级版本的3D图片轮播器,它不仅提供了基本的图片切换功能,还增加了视觉上的立体效果,提升了用户体验。下面将详细探讨这个3D版的图片轮播器Demo所涉及的技术点和实现原理。 1. **3D翻转效果** - 在...

    android 画廊视图的3D效果MyGalleryImgaSwitch 源码

    "MyGalleryImgaSwitch"是一个专为此目的设计的库,它实现了图片切换时的3D翻转效果。接下来,我们将深入探讨这个源码中的关键知识点。 1. **自定义View**: "MyGalleryImgaSwitch" 是一个自定义的View,继承自...

    Gallery3D_画廊效果Android源码.zip

    添加过渡效果,使图片切换更为自然。 3. 兼容性处理:考虑到不同设备的性能差异,需要适当调整3D效果的复杂度,确保在低端设备上也能流畅运行。 总结,Gallery3D是Android开发中一种创新的图片展示方式,通过3D滚动...

    Android实现高级图片滚动控件,3D版的图片轮播器Demo_图片滚动展示.zip

    本项目“Android高级图片滚动控件,3D版的图片轮播器Demo”专注于提供一种独特且引人入胜的3D图片展示方式,让用户能够更加沉浸地浏览图片。 首先,我们要理解3D图片轮播器的核心概念。在传统的2D轮播器基础上,3D...

    Android 3D相册图片滑动+倾斜+放大+倒影处理源码.rar

    这个"Android 3D相册图片滑动+倾斜+放大+倒影处理源码"提供了实现此类高级视觉效果的方法。下面将详细探讨这个源码中的关键知识点。 1. **3D相册效果**:此源码实现了3D翻转效果,让用户在浏览相册时仿佛在操作真实...

    Android3D翻转效果源码

    在Android开发中,3D翻转效果是一种常见的动画过渡手段,可以为用户界面带来生动而富有立体感的视觉体验。这种效果通常应用于Activity之间的切换,使得应用的交互更加吸引人。本文将深入探讨如何实现Android的3D翻转...

    Android 3D相册图片滑动+倾斜+放大+倒影处理源码

    在Android开发中,创建一个具有视觉吸引力的3D相册是一项挑战,但通过巧妙地结合各种技术,可以实现像标题中描述的那样——3D相册图片滑动、倾斜、放大以及倒影处理。这个源码项目正是为了解决这个问题,提供了一种...

Global site tag (gtag.js) - Google Analytics