web-dev-qa-db-ja.com

Android:iphoneが左から右に水平にフリップするように、Androidアクティビティのフリップアニメーションを作成するにはどうすればよいですか?

私のアプリケーションでは、ビューを反転したいと思います。iPhoneでそのようなアニメーションを見たことがあります。そして、私がAndroidアプリケーションに入れたいのと同じこと。

アクティビティビュー全体を反転させたい。出来ますか ? Androidでのフリップの例を見てきました。しかし、そのすべての例では、ビューは同じアクティビティにあります。さまざまなアクティビティにそのようなビューを設定することは可能ですか?または、あるアクティビティから別のアクティビティに移動するときにそのような効果を実行するには?

IPhoneのフリップ効果のスナップをご覧ください。

enter image description here

はいの場合は、デモの例またはコードを参照してください。ありがとう。

11

まず、独自のアニメーションを定義し、それをres-> animまたはJavaクラスの下にXMLで保存します。EclipseでのSDKダウンロードに付属するAPIデモ以外の実用的な例はありません。フリッピングアニメーションを探している場合は、3Dトランジションクラスを見てみてください。

その後、そのアニメーションをロードするアクティビティがあります。できればonCreateにロードしてください。こちらをご覧ください 質問

5
Raymond Lagonda

Android私が見た中で最も説得力のある3Dフリップアニメーションの1つはここで行われます https://code.google.com/p/Android-3d-flip-view-遷移

他の多くのチュートリアルとサンプルコードは、信頼できる3Dフリップを生成しません。 y軸の単純な回転は、iOSで行われていることではありません。

ここにもビデオがあります: http://youtu.be/52mXHqX9f3Y

4
Ephraim

これらの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()またはfinish()の後の遷移をオーバーライドします。

overridePendingTransition(R.anim.rotate_in, R.anim.rotate_out);
4
Pelanes

IOSポートレートの場合: Rotation to middle ios

「他の多くのチュートリアルやサンプルコードでは、信頼できる3Dフリップが生成されません。Y軸の単純な回転は、iOSで行われていることではありません。 "サンプルを検索して約30時間後、同意する必要があります。私は映画を持っていて、真ん中でスクリーンショットを撮ることができました。ビューの右側には次のものがあります。-左への移動と95%への縮小。ビューの左側には次のものがあります。-右側への移動と80%への縮小。

At Android Full(初期状態): 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

1
matheszabi