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>
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;
J'ai créé les animations d'ouverture et de fermeture en fondu pour Dialogbox à l'aide du code ChrisJD.
À 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>
À 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" />
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" />
Activité principale
Dialog imageDiaglog= new Dialog(MainActivity.this,R.style.PauseDialog);
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);
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));
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
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>