2011-01-27 56 views
78

Próbuję ustawić niestandardowe okno dialogowe tak, jakby zsuwało się z widoku tekstowego. czy to możliwe? Nie mogę zastosować żadnej animacji do okna dialogowego. Próbowałem tej linii w konstruktorze, ale nie ma ona żadnego efektu:Animować niestandardowe okno dialogowe

this.getWindow(). SetWindowAnimations (R.anim.paranimation);

Nie jestem nawet pewien, czy animacja jest poprawna, ale będę w stanie ją dostosować, gdy zobaczę, co robi. Wymienię to poniżej ze względu na kompletność. Nie szukam pomocy w prawdziwej animacji, tylko aplikację do okna dialogowego.

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

Muszę to również wiedzieć. Wydaje się możliwe animowanie praktycznie wszystkiego, poza tym. Czy ja się mylę ?! –

Odpowiedz

180

mam zmaga się z Dialog animacji dzisiaj, w końcu to praca przy użyciu stylów, więc tutaj jest przykładem.

Na początek najważniejsza rzecz - prawdopodobnie pracowałem na 5 różnych sposobów dzisiaj, ale nie mogłem tego stwierdzić, ponieważ ... Jeśli ustawienia animacji urządzeń są ustawione na "Brak animacji" (Ustawienia → Wyświetlacz → Animacja) wtedy dialogi nie będą animowane bez względu na to, co zrobisz!

Poniżej znajduje się obnażona wersja pliku styles.xml. Mam nadzieję, że jest to oczywiste. Powinno to być zlokalizowane w 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 jest jednym z moich animacji i znajduje się w res\anim. The windowExitAnimation to jedna z animacji, która jest częścią Androida SDK.

Następnie, po utworzeniu okna dialogowego w mojej działalności onCreateDialog(int id) metoda wykonać następujące czynności.

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); 

Alternatywnie można ustawić animacje następujący sposób zamiast używania konstruktora dialogowym, które zajmuje motyw.

+0

Świetna rzecz! nie miałby nic przeciwko umieszczaniu kodu na @ anim/spin_in? – Neutralizer

+2

To było tylko imię, które nadrobiłem dla tego przykładu, nigdy nie stworzyłem tej animacji. – ChrisJD

+2

Dziękuję bardzo za tę odpowiedź, jest ona bardzo słabo udokumentowana, ale znalazłem ten post za pomocą wskazówki od [programistów Androida] (http://groups.google.com/group/android-developers/browse_thread/thread/d28096a900b83f0c) Grupa. –

42

Utworzyłem animację Fade in i Fade Out dla Dialogbox przy użyciu kodu ChrisJD.

  1. Inside 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. Wewnątrz Anim/fadein.xml

    <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. Wewnątrz anim/fadeut.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. główną działalność

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

Możesz użyć domyślnych animacji zanikania androida "@android: anim/fade_in '" @android: anim/fade_out' – Marek

+0

Animacja nie działa w oknie dialogowym. – portfoliobuilder

7

spotykam ten sam problem, ale w końcu rozwiązać ten problem, a następnie sposób

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

Nie rozsądna odpowiedź. Widoki w oknie dialogowym zostaną animowane – DJphy

14

Do prawej do lewej (animacja wejścia) i od lewej do prawej (animacja zakończenia):

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> 

Utwórz dwa pliki w Res/Anim /:

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%"/> 

W tobie Fragment/aktywność:

Dialog dialog = new Dialog(getActivity(), R.style.CustomDialog);