web-dev-qa-db-fra.com

Animer un dialogue personnalisé

J'essaie de faire apparaître une boîte de dialogue personnalisée comme si elle glissait depuis une vue texte. Est-ce possible? Je n'arrive pas à appliquer d'animation à la classe de dialogue. J'ai essayé cette ligne dans le constructeur, mais cela n'a aucun effet:

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

Je ne suis même pas sûr que l'animation est correcte, mais je pourrai l'ajuster une fois que je verrai ce qu'elle fait. Je vais en donner la liste ci-dessous par souci d'exhaustivité. Je ne cherche pas d'aide sur l'animation proprement dite, mais simplement l'application au dialogue.

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>
92
FMLDev

Aujourd'hui, j'ai du mal à utiliser l'animation Dialog, je l'ai enfin utilisée avec des styles. Voici donc un exemple.

Pour commencer, la chose la plus importante: je l’avais probablement fait fonctionner 5 façons différentes aujourd’hui, mais je ne pouvais pas le savoir parce que ... Si les paramètres d’animation de vos appareils sont réglés sur "Aucune animation" (Paramètres → Affichage → Animation), les dialogues ont été gagnés. soyez pas animé quoi que vous fassiez!

Ce qui suit est une version simplifiée de mon styles.xml. Espérons que cela va de soi. Cela devrait être situé dans 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>

Le windowEnterAnimation est l'une de mes animations et se trouve dans res\anim. Le windowExitAnimation est l’une des animations du SDK Android.

Ensuite, lorsque je crée le dialogue dans ma méthode d’activités onCreateDialog(int id), je procède comme suit.

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

Vous pouvez également définir les animations de la manière suivante au lieu d'utiliser le constructeur Dialog qui prend un thème.

Dialog dialog = new Dialog(this);
dialog.getWindow().getAttributes().windowAnimations = R.style.PauseDialogAnimation;
206
ChrisJD

J'ai créé les animations d'ouverture et de fermeture en fondu pour Dialogbox à l'aide du code ChrisJD.

  1. À l'intérieur de 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. À l'intérieur 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. Dans 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. Activité principale

    Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog);
    
48
Akshay Taru

Pour droite à gauche (animation d'entrée) et de gauche à droite (sortie animation):

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>

Crée deux fichiers dans 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%"/>

Dans votre fragment/activité:

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

Je rencontre le même problème, mais je résous enfin le problème de manière suivie

((ViewGroup)dialog.getWindow().getDecorView())
.getChildAt(0).startAnimation(AnimationUtils.loadAnimation(
context,Android.R.anim.slide_in_left));
12
youshuang

Vous devez d’abord créer deux ressources d’animation dans res/anim

slide_up.xml

<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate 
  Android:duration="@Android:integer/config_mediumAnimTime" 
  Android:fromydelta="100%" 
  Android:interpolator="@Android:anim/accelerate_interpolator" 
  Android:toxdelta="0">
</translate>

slide_bottom.xml

<set xmlns:Android="http://schemas.Android.com/apk/res/Android">
<translate 
    Android:duration="@Android:integer/config_mediumAnimTime" 
    Android:fromydelta="0%p" 
    Android:interpolator="@Android:anim/accelerate_interpolator" 
    Android:toydelta="100%p">
</translate>

alors vous devez créer un style

<style name="DialogAnimation">
    <item name="Android:windowEnterAnimation">@anim/slide_up</item>
    <item name="Android:windowExitAnimation">@anim/slide_bottom</item>
</style>

et ajouter cette ligne à votre classe

dialog.getWindow().getAttributes().windowAnimations = R.style.DialogAnimation; //style id

Basé à http://www.devexchanges.info/2015/10/showing-dialog-with-animation-in-Android.html

3
Argel Ortiz Arenas

Essayez ci-dessous le code:

public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));// set transparent in window background

        View _v = inflater.inflate(R.layout.some_you_layout, container, false);

        //load animation
        //Animation transition_in_view = AnimationUtils.loadAnimation(getContext(), Android.R.anim.fade_in);// system animation appearance
        Animation transition_in_view = AnimationUtils.loadAnimation(getContext(), R.anim.customer_anim);//customer animation appearance

        _v.setAnimation( transition_in_view );
        _v.startAnimation( transition_in_view );
        //really beautiful
        return _v;

    }

Créez l'animation personnalisée: res/anim/customer_anim.xml:

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

    <translate
        Android:duration="500"
        Android:fromYDelta="100%"
        Android:toYDelta="-7%"/>
    <translate
        Android:duration="300"
        Android:startOffset="500"
        Android:toYDelta="7%" />
    <translate
        Android:duration="200"
        Android:startOffset="800"
        Android:toYDelta="0%" />

</set>
0
amiron