web-dev-qa-db-ja.com

アクティビティを上から下にアニメーション化します

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();
}
26
user2903200

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

見るアニメーションの重要な部分は、fromYDeltatoYDeltaの値です。これらは、アニメーションの開始および終了時の(ビューの上部の)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開発者サイト:


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

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

77

これを行う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);
  }
7
nyx

メインのxmlファイル。ルートタグのIDを追加し、これを関数に渡します。お気に入り

/** The Constant ANIM_NO. */
public static final int ANIM_NO = 0;

public static void topToDown(Context context, View target, int type,
        int duration) {

    if (type == UtilityAnimations.ANIM_NO) {
        UtilityAnimations.topToDown(context, target, duration);
    } else {
        final Animation animation = new TranslateAnimation(
                Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, 0.0f,
                Animation.RELATIVE_TO_SELF, -1.0f,
                Animation.RELATIVE_TO_SELF, 0.0f);
        animation.setDuration(duration != 0 ? duration
                : UtilityAnimations.DURATION_MEDIAM);
        animation.setInterpolator(UtilityAnimations.getInterpolator(
                context, type));
        target.startAnimation(animation);
    }
}
4
Usman Afzal

onPause()でTransitionをオーバーライドすることで、その逆を行うことができます。

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

}
1
Arash GM