26

画面の下部から上部にアニメーション化してアクティビティを表示する Android アプリを作成しています。ここからのコードでこれを行うことができます:

ただし、画面の上から下にスライドしてアクティビティが消える逆のアニメーションを行うことはできません。

上記のリンクのコードを使用しました。アクティビティは上にスライドして表示されますが、消えるときは下にスライドするのではなく、フェードアウトします。

コードを入れてみましたonCreate()

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    overridePendingTransition(R.anim.appear_from_bottom, R.anim.disappear_to_bottom);
    setContentView(R.layout.activity_all_metadata_display);
    initializePage();
}
4

4 に答える 4

87

リンクされた質問から「スライドアップ」アニメーションを定義し、プロセスを逆にするいくつかの新しい「スライドダウン」アニメーションを定義する必要があります。

注目すべきアニメーションの重要な部分は、fromYDeltaとのtoYDelta値です。これらは、アニメーションの開始時と終了時の (ビューの上部の) Y 位置を定義します。

slide_in_up.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="100%p"
    android:toYDelta="0%p" />

slide_out_up.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="-100%p" />

slide_in_down.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="-100%p"
    android:toYDelta="0%p" />

slide_out_down.xml

<?xml version="1.0" encoding="utf-8"?>
<translate xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="100%p" />

onResume()「スライドアップ」アニメーションの場合、次のようにメソッドで保留中の遷移をオーバーライドする必要があります。

protected void onResume()
{
    super.onResume();
    overridePendingTransition(R.anim.slide_in_up, R.anim.slide_out_up);
}

onPause()「スライドダウン」アニメーションの場合は、メソッドで同様のことを行います。

protected void onPause()
{
    super.onPause();
    overridePendingTransition(R.anim.slide_in_down, R.anim.slide_out_down);
}

一部のチュートリアルでは、間違ったライフサイクル メソッドの使用を提案しています。

  • onCreate()アクティビティが表示されるたびに呼び出されるわけではありません
  • onDestroy()アクティビティが削除されるたびに呼び出されるわけではありません

代わりに、画面遷移があるたびに呼び出されるメソッドを使用します。

  • onResume()アクティビティがユーザーに表示されるときに呼び出されます
  • onPause()アクティビティが削除されるときに呼び出されます

これらのメソッドの具体的な詳細については、Android 開発者サイトを確認してください。


画面が表示されると、下からスライドインします。

新しい画面が表示されると、画面が下にスライドします。

于 2014-05-20T06:34:16.487 に答える
8

これを行う 2 つの方法:

1. スタイルの使用

これをすべてのアクティビティに実装すると仮定すると、基本テーマで次のエントリを定義します。

<item name="android:windowAnimationStyle">@style/ActivityAnimations</item>

次に、次のスタイルを定義します。

<style name="ActivityAnimations" parent="android:style/Animation.Activity">
    <item name="android:activityOpenEnterAnimation">@anim/appear_from_bottom</item>
    <item name="android:activityOpenExitAnimation">@anim/hold</item>
    <item name="android:activityCloseEnterAnimation">@anim/hold</item>
    <item name="android:activityCloseExitAnimation">@anim/disappear_to_bottom</item>
</style>

@anim/hold次のような場所があります。

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >
    <translate
        android:duration="1000"
        android:zAdjustment="bottom" />
</set>

2. overridePendingTransition() の使用

オーバーライドfinish():

  @Override
  public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.disappear_to_bottom);
  }

onBackPressed() をオーバーライドします。

  @Override
  public void onBackPressed() {
    finish();
  }

onOptionsItemSelected() をオーバーライドします。

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
      case android.R.id.home:
        finish();
        return true;
    }
    return super.onOptionsItemSelected(item);
  }
于 2014-05-21T19:16:09.010 に答える
1

onPause() で Transition をオーバーライドすることで、トランジションを逆にすることができます。

@Override
protected void onPause()
{
    super.onPause();
    overridePendingTransition(R.anim.appear_from_bottom, R.anim.disappear_to_bottom);

}
于 2014-05-10T07:04:06.343 に答える