2012-02-12 15 views
32

Mam okno wyskakujące w mojej aplikacji, pojawia się, gdy jakiś przycisk kliknął Chcę ustawić zanikanie w animacji do tego okna, Umieściłem plik xml w "res/anim" "folder i ustawić styl animacji dla okna podręcznego, ale animacja nie działa? tutaj jest moje kody:jak zrobić animację dla okna wyskakującego w Androidzie

myanim.xml ...

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <alpha android:fromAlpha="0.0" 
     android:toAlpha="1.0" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:duration="4000" 
     android:repeatCount="1"/> 
</set> 

=========================== ====================

Tworzenie okienko

private PopupWindow showOptions(Context mcon){ 
    try{ 
     LayoutInflater inflater = (LayoutInflater) mcon.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     View layout = inflater.inflate(R.layout.options_layout,null); 
     layout.setAnimation(AnimationUtils.loadAnimation(this, R.anim.myanim)); 
     PopupWindow optionspu = new PopupWindow(layout, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

     optionspu.setFocusable(true); 
     optionspu.showAtLocation(layout, Gravity.TOP, 0, 0); 
     optionspu.update(0, 0, LayoutParams.WRAP_CONTENT, (int)(hei/5)); 
     optionspu.setAnimationStyle(R.anim.myanim); 
     return optionspu; 
    } 
    catch (Exception e){e.printStackTrace(); 
    return null;} 
} 

=============== ================================== onClick method ... (optionsPopup jest zmienną globalną typu PopupWindow)

@Override 
public void onClick(View v) { 
       switch (v.getId()) { 
     case R.id.options: 
       optionsPopup=showOptions(this); 
      break; 
} 

Odpowiedz

86

Myślę, że problem polega na tym, że podałeś tylko jeden zestaw stylu animacji. Ale faktycznie PopupWindow wymaga dwóch animacji. Jeden będzie używany przez niego, gdy okno zostanie pokazane, a drugi do ukrycia okna.

Jest to, jak należy to zrobić,

1) utworzyć dwa różne zestawy animacji.

powiedzieć, popup_show.xml i popup_hide.xml i dodać go do anim folderu, który trzeba utworzyć wewnątrz res folderów.

2) Teraz wewnątrz wartości folderu utworzyć xml nazwie styles.xml i dodać te animacje do niego tak,

<style name="Animation"> 
    <item name="android:windowEnterAnimation">@anim/popup_show</item> 
    <item name="android:windowExitAnimation">@anim/popup_hide</item> 
</style> 

3) Teraz ustawić ten styl animacji PopupWindow,

popup.setAnimationStyle(R.style.Animation); 

Teraz automatycznie wykrywa okno Enter i Exit i zapewnia wymaganą animację.

+0

To musi ustawić przed metody showaslocation wezwanie na pewno.Ale jakoś popup jest otwierany wiele razy za każdym razem, gdy kliknę przycisk, jakieś wskazówki, dlaczego wiele razy? – Ari

+0

@Ari czy rozwiązałeś problem z podwójną animacją? – Anton

+0

Udało mi się pozbyć podwójnej animacji poprzez usunięcie androida: repeatCount = "1" z animacji – NewestStackOverflowUser

11

używam animacji podręczne z tym kodem:

// Creating the PopupWindow 
     layoutInflater = (LayoutInflater)  getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     inflatedLayoutView = layoutInflater.inflate(R.layout.packages_popup,null); 
    inflatedLayoutView.setAnimation(AnimationUtils.loadAnimation(this, R.animator.popupanim) 


    popup_l = new PopupWindow(inflatedLayoutView); 

    popup_l.setWidth(FrameLayout.LayoutParams.WRAP_CONTENT); 
    popup_l.setHeight(FrameLayout.LayoutParams.WRAP_CONTENT);  
    popup_l.setFocusable(true); 
    // Clear the default translucent background 
    popup_l.setBackgroundDrawable(new BitmapDrawable());  

    popup_l.showAtLocation(parent, Gravity.CENTER, 0 , 0); 

    popup_l.setOutsideTouchable(false); 

się w /res/animator/popupanim.xml (popupanim.xml) kod animacji:

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" > 

<alpha android:fromAlpha="0.0" 
     android:toAlpha="1.0" 
     android:interpolator="@android:anim/accelerate_interpolator" 
     android:duration="500" 
     android:repeatCount="0"/> 
</set> 
5

Może to być trochę za późno, ale powodem, dla którego animacja się nie pokazuje, jest wyświetlanie okna popup przed ustawieniem animacji.

optionspu.showAtLocation(layout, Gravity.TOP, 0, 0); 
optionspu.setAnimationStyle(R.anim.myanim); 

tyłu dwie linie, a zobaczysz animację:

optionspu.setAnimationStyle(R.anim.myanim); 
optionspu.showAtLocation(layout, Gravity.TOP, 0, 0);