私のアプリケーションでは、ビューを反転したいと思います。iPhoneでそのようなアニメーションを見たことがあります。そして、私がAndroidアプリケーションに入れたいのと同じこと。
アクティビティビュー全体を反転させたい。出来ますか ? Androidでのフリップの例を見てきました。しかし、そのすべての例では、ビューは同じアクティビティにあります。さまざまなアクティビティにそのようなビューを設定することは可能ですか?または、あるアクティビティから別のアクティビティに移動するときにそのような効果を実行するには?
IPhoneのフリップ効果のスナップをご覧ください。
はいの場合は、デモの例またはコードを参照してください。ありがとう。
まず、独自のアニメーションを定義し、それをres-> animまたはJavaクラスの下にXMLで保存します。EclipseでのSDKダウンロードに付属するAPIデモ以外の実用的な例はありません。フリッピングアニメーションを探している場合は、3Dトランジションクラスを見てみてください。
その後、そのアニメーションをロードするアクティビティがあります。できればonCreateにロードしてください。こちらをご覧ください 質問
Android私が見た中で最も説得力のある3Dフリップアニメーションの1つはここで行われます https://code.google.com/p/Android-3d-flip-view-遷移 。
他の多くのチュートリアルとサンプルコードは、信頼できる3Dフリップを生成しません。 y軸の単純な回転は、iOSで行われていることではありません。
ここにもビデオがあります: http://youtu.be/52mXHqX9f3Y
これらの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);
「他の多くのチュートリアルやサンプルコードでは、信頼できる3Dフリップが生成されません。Y軸の単純な回転は、iOSで行われていることではありません。 "サンプルを検索して約30時間後、同意する必要があります。私は映画を持っていて、真ん中でスクリーンショットを撮ることができました。ビューの右側には次のものがあります。-左への移動と95%への縮小。ビューの左側には次のものがあります。-右側への移動と80%への縮小。
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
}
いくつかの違いは次のとおりです。-ビューの右側はiOSのように移動しません。
Z軸の平行移動では修正されないと思います。多分どういうわけかあまりにも縮小が必要でした。
float dz = (float) (centerX * Math.sin(rad));
camera.translate(0f, 0f, -dz);
まだ十分ではありません。左側の収縮が多すぎます。