web-dev-qa-db-ja.com

移行中に新しいアクティビティを古いアクティビティの背後に表示する

私が達成しようとしているのは、開始アクティビティのアニメーションをオーバーライドすることです。

アニメーションは、古いアクティビティが新しいアクティビティの上にあるような印象を与え、画面から下にスライドして新しいアクティビティを表示します。 overridePendingTransition(startAnim, exitAnim)を使用するなど、複数の方法を試しましたが、問題は、両方が同じタイムラインでアニメーション化することです。したがって、overridePendingTransition(R.anim.hold, R.anim.exit_slide_down);新しいアクティビティが一番上にあるため、終了アニメーションは表示されません。これはフレームワークを使用して実現できますか?

enter image description here

36
johncc

実際、アニメーションファイルでAndroid:zAdjustmentというプロパティを見つけました。

Android:zAdjustment="bottom"hold.xmlを配置し(画面2)、Android:zAdjustment="top"Push_down_out.xmlを配置すると(画面1)、目的の効果を得ることができます。

これはzオーダーの問題を回避します(私はそれがアニメーションタイミングの問題であると想定していたため、間違ったツリーを呼び出していました)。

ジョン

31
johncc

私はサンプルプロジェクトであなたの解決策を解決しようと試みており、私はそれをこのコードで動作させました:

アニメーションを呼び出す:

startActivity(new Intent(this, Activity2.class));
overridePendingTransition(R.anim.Push_down_in,R.anim.Push_down_out);

R.anim.Push_down_in:

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

R.anim.Push_down_out:

<?xml version="1.0" encoding="utf-8"?>  
<set xmlns:Android="http://schemas.Android.com/apk/res/Android">  
  <translate Android:fromYDelta="0" Android:toYDelta="100%p" Android:duration="300"/>
</set>  
30
Romain Piel

私のために働く解決策:

R.anim.exit_slide_down

<set xmlns:Android="http://schemas.Android.com/apk/res/Android" 
     Android:zAdjustment="top">  

    <translate Android:fromYDelta="0" 
               Android:toYDelta="100%p" 
               Android:duration="600" />
</set>

...その後

Intent intent = new Intent(activity, SecondActivity.class);
startActivity(intent);
activity.overridePendingTransition(0, R.anim.exit_slide_down);
7
Lukasz R.