2011-01-27 9 views
78

カスタムダイアログをテキストビューからスライドしているように見せようとしています。これは可能ですか?私はダイアログクラスにアニメーションを適用することはできません。私はコンストラクタでこの線を試しましたが、効果はありません:カスタムダイアログにアニメーションを適用する

this.getWindow()。setWindowAnimations(R.anim.paranimation);

アニメーションが正しいかどうかはわかりませんが、それが何をしているかを見たら調整できます。私は完全性のために以下にリストアップします。私は実際のアニメーションのヘルプを探しているわけではなく、ダイアログへのアプリケーションだけを探しています。

paranimation.xml:

<?xml version="1.0" encoding="utf-8"?> 
<translate 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:fromXDelta="-200%" 
    android:toXDelta="0%" 
    android:fromYDelta="200%" 
    android:toYDelta="0%" 
    android:duration="3000" 
    android:zAdjustment="top"> 
</translate> 
+3

これも知っておく必要があります。これとは別に何かをアニメーション化することは可能です。または私は間違っていますか? –

答えて

180

私は最終的にそれがスタイルを使用して作業してしまった、今日ダイアログアニメーションで苦労するので、ここでは一例できました。

今日は5つの異なる方法で作業していましたが、その理由はわかりませんでした...デバイスのアニメーション設定が[アニメーションなし](設定→表示→アニメーション)に設定されていると、あなたが何をしても、ダイアログはアニメーション化されません!

以下は、私のstyles.xmlを削除したものです。うまくいけばそれは自明である。これはres/valuesにあるはずです。

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="PauseDialog" parent="@android:style/Theme.Dialog"> 
     <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item> 
    </style> 

    <style name="PauseDialogAnimation"> 
     <item name="android:windowEnterAnimation">@anim/spin_in</item> 
     <item name="android:windowExitAnimation">@android:anim/slide_out_right</item> 
    </style> 
</resources> 

windowEnterAnimationは私のアニメーションの一つであり、res\animに位置しています。 windowExitAnimationは、Android SDKの一部であるアニメーションの1つです。

私のアクティビティでダイアログを作成すると、onCreateDialog(int id)メソッドが実行されます。

Dialog dialog = new Dialog(this, R.style.PauseDialog); 

// Setting the title and layout for the dialog 
dialog.setTitle(R.string.pause_menu_label); 
dialog.setContentView(R.layout.pause_menu); 

また、テーマを取るDialogコンストラクタを使用する代わりに、アニメーションを次のように設定することもできます。

Dialog dialog = new Dialog(this); 
dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation; 
+0

素晴らしいこと! @ anim/spin_inのコードを入れても構いませんか? – Neutralizer

+2

これはあくまで私がこの例のために作った名前であり、私は実際にそのアニメーションを作成したことはありません。 – ChrisJD

+2

この回答をいただきありがとうございます。この投稿は[Android Developers](http://groups.google.com/group/android-developers/browse_thread/thread/d28096a900b83f0c)のヒントを介して見つけましたが、グループ。 –

42

私は、ChrisJDコードを使用してDialogboxのフェードインとフェードアウトのアニメーションを作成しました。

  1. 内のres/style.xmlアニメーションインサイド

    <style name="AppTheme" parent="android:Theme.Light" /> 
    <style name="PauseDialog" parent="@android:style/Theme.Dialog"> 
        <item name="android:windowAnimationStyle">@style/PauseDialogAnimation</item> 
    </style> 
    
    <style name="PauseDialogAnimation"> 
        <item name="android:windowEnterAnimation">@anim/fadein</item> 
        <item name="android:windowExitAnimation">@anim/fadeout</item> 
    </style> 
    

  2. /fadein.xmlアニメーション/ fadeutインサイド

    <alpha xmlns:android="http://schemas.android.com/apk/res/android" 
        android:interpolator="@android:anim/accelerate_interpolator" 
        android:fromAlpha="0.0" android:toAlpha="1.0" android:duration="500" /> 
    
  3. 。XML

    <alpha xmlns:android="http://schemas.android.com/apk/res/android" 
        android:interpolator="@android:anim/anticipate_interpolator" 
        android:fromAlpha="1.0" android:toAlpha="0.0" android:duration="500" /> 
    
  4. MainActivity

    Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog); 
    
+8

デフォルトのアンドロイドフェードアニメーション '@android:anim/fade_in' '@android:anim/fade_out'を使用できます – Marek

+0

アニメーションがダイアログで機能していないようです。 – portfoliobuilder

7

私は同じ問題を満たしていますが、最後に私は(右から左への場合

((ViewGroup)dialog.getWindow().getDecorView()) 
.getChildAt(0).startAnimation(AnimationUtils.loadAnimation(
context,android.R.anim.slide_in_left)); 
+4

賢明な答えではありません。ダイアログ内のビューはアニメーション化されます – DJphy

14

続く道で問題を解決エントリアニメーション)、左から右(アニメーションを終了):

のstyles.xml:

<style name="CustomDialog" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowAnimationStyle">@style/CustomDialogAnimation</item> 
</style> 

<style name="CustomDialogAnimation"> 
    <item name="android:windowEnterAnimation">@anim/translate_left_side</item> 
    <item name="android:windowExitAnimation">@anim/translate_right_side</item> 
</style> 

/RES /アニメーションで2つのファイルを作成します。

translate_right_side.xml:

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

translate_left_side.xml:

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

あなたの断片/活動:

Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog); 
関連する問題