2011-11-30 13 views
30

は私が右startActivity()または終了()Androidアプリケーションですべてのアクティビティトランジションを一度に変更するにはどうすればよいですか?

activity.overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit);

の後に次のコードを使用して、アクティビティ遷移を変更することができます知っているしかし、私は私のアプリで10回の活動を持っている場合、私はそれを10回行う必要があります。変更することは非常に困難です。ですから、アプリケーション内のすべてのアクティビティの遷移を一度に設定する方法があるかどうかは疑問です。 AndroidManifest.xmlに対応する設定がありますか?

ありがとうございます!

答えて

52

あなたが最初にこのように、RES /のstyles.xmlに<style>を作成したい:

<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity"> 
     <item name="android:windowEnterAnimation">@anim/your_in_down</item> 
     <item name="android:windowExitAnimation">@anim/your_out_down</item> 
    </style> 

次に、あなたが同じファイルに、テーマにスタイルを適用することができます。

<style name="YourTheme" parent="android:Theme.Translucent"> 
     ... 
     <item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item> 
    </style> 

最後にマニフェストでのあなたの活動にテーマを適用してください:

<activity 
     android:name=".YourActivity" 
     android:theme="@style/YourTheme" /> 

これらのリンクを見てくださいR参照:

+20

それは働きます!実際には、私は少し変更します: ' ' –

+0

、彼らが働いているように、オープンアニメーションが見えるが、近くのアニメーションを有効にいけない – toobsco42

+0

@GenLiuあなたは私にあなたを表示することができますxmlの例?私はちょうどopenexitとcloseの違いを見ることができません。例えば、入力してください。 –

13

私はここにこれが回答されている知っているが、私は私に何をしたかです。私たちはまだAPI 14をサポートしているので、いくつかのアニメーションが欠けているので、私はAPI 22(sli​​de_in_right、slide_out_left)からプロジェクトに取り込まなければなりませんでした。これは、新しいアクティビティを開いたときに画面内をスライドして、閉じているものを左にスライドさせることです。バックを押すと、前の画面の左側からスライドし、現在の画面の右側を閉じます。

<style name="YourTheme" parent="android:Theme.Translucent"> 
    ... 
    <item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item> 
</style> 

<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity"> 
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> 
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> 
    <item name="android:activityCloseEnterAnimation">@android:anim/slide_in_left</item> 
    <item name="android:activityCloseExitAnimation">@android:anim/slide_out_right</item> 
</style> 
+0

API 22ライブラリからまっすぐで、API 22のソースをダウンロードするだけでアニメーションフォルダに保存されます。 – JPM

6

私の解決策は、JPM回答とほとんど同じです。しかし、ここにあなたが必要とするかもしれないいくつかの追加ファイルがあります。

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorPrimary</item> 
    <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> 

</style> 

<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity"> 
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> 
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> 
    <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item> 
    <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item> 
</style> 

のresフォルダの下にアニメーションのフォルダを作成し、この4つのアニメーションファイルを作成します。

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_left.xml

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

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="-100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="100%p" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 
+0

これはまったく動作しません。最低でもアンドロイド6(huawei p8) – qkx

+0

は、huawei gPlay mini(Android 6)とNexus 9(Android 7)でスムーズに動作します。このプロジェクトを実行してください: https://github.com/ShohanAhmed/Android-Activity-Transition-Custom-Animation –

+0

私は問題を調査し、あなたは部分的に正しいです。それは自分の電話機でも実行されていますが、(新しいアクティビティを表示するために)インテントをアクティビティから呼び出すときだけです。ウィジェットからいくつかのアクティビティを開き、Pending Intentを使用したい場合は、そこでは動作していません。この場合、唯一のオプションは、私が最初に言及したように、プログラムでアニメーションをコードで設定することです。 – qkx

関連する問題