2015-12-31 1 views
2

Je souhaite afficher/masquer une fenêtre popup à l'aide d'une animation expand/collapse de this answer. J'ai été capable d'utiliser l'animation en l'appliquant à la vue popup qui est une vue à l'intérieur de popupwindow. Le problème auquel je suis confronté maintenant est que lorsque l'utilisateur touche en dehors de popupwindow, popup fenêtre automatiquement rejette et je ne peux pas montrer l'animation de repli avant de rejeter le popup.Android PopupWindow Animation Java personnalisée

Voici le code que je l'ai écrit:

View popupView = View.inflate(context,R.layout.popuplayout, null); 
popup = new PopupWindow(popupView,ViewGroup.LayoutParams.MATCH_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
popup.setAnimationStyle(0); 
popup.setOutsideTouchable(true); 
popup.setFocusable(true); 
popup.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
popup.showAsDropDown(anchor, 0, 0); 
popup.setBackgroundDrawable(null); 
popupView.post(new Runnable() { 
    @Override 
    public void run() { 
      expand(popupView); 
    } 
}); 
. 
. 
. 
private void expand(final View v) { 
    final int targetHeight = ((View)v.getParent()).getHeight(); 
    // Older versions of android (pre API 21) cancel animations for views with a height of 0. 
    v.getLayoutParams().height = 1; 
    v.setVisibility(View.VISIBLE); 
    Animation a = new Animation() 
    { 
     @Override 
     protected void applyTransformation(float interpolatedTime, Transformation t) { 
      v.getLayoutParams().height = interpolatedTime == 1 
        ? LayoutParams.MATCH_PARENT 
        : (int)(targetHeight * interpolatedTime); 
      v.requestLayout(); 
     } 

     @Override 
     public boolean willChangeBounds() { 
      return true; 
     } 
    }; 
    a.setDuration(200); 
    v.startAnimation(a); 
} 

Je me demandais s'il y a une façon de montrer une animation avant de rejeter pop-up en touchant l'extérieur sans style xml ou mettre en œuvre l'animation donnée en utilisant des animations xml.

Répondre

1
public class PopupWindowCustom extends PopupWindow{ 
    public dismiss(){ 
    View view = getCustomView(); 
    expand(view); 
    super.dismiss(); 
    } 

    private expand(View view){ 
    //do some anim 
    } 
} 
+0

Pas exactement ce que je voulais mais j'ai eu l'idée de le faire :) Merci –

-1

Voici comment vous devriez le faire,

1) Créer deux différents ensemble d'animations.

dire, popup_show.xml et popup_hide.xml et l'ajouter à votre dossier anim que vous devez créer à l'intérieur res dossier.

2) maintenant à l'intérieur valeurs créer un dossier xml appelé styles.xml et ajoutez ces animations comme ça,

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

3) Réglez maintenant ce style à votre animation PopupWindow,

popup.setAnimationStyle(R.style.Animation); 

Maintenant, il détecte automatiquement les fenêtres Enter et Exit et fournit l'animation requise. selon Andro Selva.

+0

Je pense que ce n'est pas utile car il n'y a aucun moyen d'implémenter mon animation personnalisée dans les animations XML. Donc, AUCUN moyen de créer des animations popup_show et popup_hide qui peuvent développer/réduire une vue sans mise à l'échelle. Merci d'avoir répondu. –