2011-12-14 120 views
10

在我的應用程序中,我想翻轉視圖.. 我在iPhone中看到過這樣的動畫。同樣的事情,我想在我的Android應用程序。Android:如何使android動作的翻轉動畫像iphone一樣從左向右水平翻轉?

我想翻轉整個活動視圖。可能嗎 ? 我已經看到了在android中翻轉的一些例子。但是,所有示例中的視圖都在同一個活動中。是否可以爲不同的活動設置此類視圖。或者在從一項活動轉到另一項活動時做這種效果?

請參閱在iPhone的翻頁效果的卡:

enter image description here

如果是的話,請給參考任何演示示例或代碼。 謝謝。

+0

尋找android.R.anim in resp。 SDK版本文件夾,你可以找到一些例子。 – 2011-12-14 05:26:42

回答

5

首先定義您自己的動畫並將其存儲在res-> anim或java類下的XML中。如果您正在尋找翻轉動畫,請嘗試查看3D轉換類,我沒有任何Eclipse演示文稿中隨附的API演示以外的其他工作示例。

之後有你的活動加載該動畫,最好加載到onCreate。請參考這裏question

4

,您可以撥打這些XML文件非常相似。

rotate_out.xml

<?xml version="1.0" encoding="utf-8"?> 

<scale 
    android:duration="300" 
    android:fromXScale="1.0" 
    android:fromYScale="1.0" 
    android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:toXScale="0.0" 
    android:toYScale="0.90" /> 

<alpha 
    android:duration="1" 
    android:fromAlpha="1.0" 
    android:startOffset="500" 
    android:toAlpha="0.0" /> 

rotate_in.xml

<?xml version="1.0" encoding="utf-8"?> 

<scale 
    android:duration="200" 
    android:fromXScale="0.0" 
    android:fromYScale="0.90" 
    android:interpolator="@android:anim/accelerate_decelerate_interpolator" 
    android:pivotX="50%" 
    android:pivotY="50%" 
    android:startOffset="500" 
    android:toXScale="1.0" 
    android:toYScale="1.0" /> 

<alpha 
    android:duration="1" 
    android:fromAlpha="0.0" 
    android:startOffset="500" 
    android:toAlpha="1.0" /> 

在startActivity()或完成(後)你的代碼控過渡

然後:

overridePendingTransition(R.anim.rotate_in, R.anim.rotate_out); 
+0

這是旋轉,而不是翻轉 – Boy 2014-10-02 07:49:50

1

在iOS的肖像: Rotation to middle ios

「很多其他的教程和示例代碼不會產生可信的3D翻轉。 y軸上的簡單旋轉並不是iOS中所做的。「 經過近30小時的搜索樣本,我不得不同意。 我有一部電影,在那裏我可以在中間截圖。 視圖的右側有: - 向左移動並縮小至95%。 視圖的左側有: - 向右側移動並縮小至80%。

在Android的全(初始狀態): android initial

的Android中間: android middle

的Android代碼:

// @param interpolatedTime The value of the normalized time (0.0 to 1.0) 
// @param t The Transformation object to fill in with the current transforms. 
protected void applyTransformation(float interpolatedTime, Transformation t){ 

    float degrees = toDegree*interpolatedTime; 
    //float rad = (float) (degrees * Math.PI/180.0f); 

    Matrix matrix = t.getMatrix(); 
    camera.save(); 

    camera.rotateY(degrees); 
    camera.getMatrix(matrix); 
    camera.restore(); 

    matrix.preTranslate(-centerX, -centerY);// M' = M * T(dx, dy) 
    matrix.postTranslate(centerX, centerY); // M' = T(dx, dy) * M 
} 

代碼的改進版本可以在最實施例中找到:

// @param interpolatedTime The value of the normalized time (0.0 to 1.0) 
    // @param t The Transformation object to fill in with the current transforms. 
    protected void applyTransformation(float interpolatedTime, Transformation t){ 

     float degrees = toDegree*interpolatedTime; 
     //float rad = (float) (degrees * Math.PI/180.0f); 

     Matrix matrix = t.getMatrix(); 
     camera.save(); 

     camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime); 
     camera.rotateY(degrees); 

     camera.getMatrix(matrix); 
     camera.restore(); 

     matrix.preTranslate(-centerX, -centerY);// M' = M * T(dx, dy) 
     matrix.postTranslate(centerX, centerY); // M' = T(dx, dy) * M 
    } 

improved android

有些區別是: - 視圖的右側不會像iOS那樣移動。

下面是Android相機軸: axes

我相信在Z軸的一個翻譯中不能解決問題。不知怎的,也許需要收縮。

float dz = (float) (centerX * Math.sin(rad)); 
camera.translate(0f, 0f, -dz); 

還不夠。要收縮左側。

z