J'affiche un DialogFragment
lorsque l'utilisateur appuie sur une ligne dans un ListView
. Je voudrais animer l'affichage du dialogue pour qu'il se développe à partir du centre de la ligne. Un effet similaire peut être observé lors de l'ouverture d'un dossier à partir du lanceur.
Une idée que j'ai eue est une combinaison de TranslateAnimation
et ScaleAnimation
. Y a-t-il un autre moyen?
android
android-fragments
android-animation
Edward Dale
la source
la source
Réponses:
En tant
DialogFragment
que wrapper pour laDialog
classe, vous devez définir un thème sur votre baseDialog
pour obtenir l'animation souhaitée:Ensuite, il vous suffit de définir le thème qui inclura l'animation souhaitée. Dans styles.xml, ajoutez votre thème personnalisé:
Ajoutez maintenant les fichiers d'animation dans le dossier res / anim :
(
android:pivotY
c'est la clé)anim_in.xml
anim_out.xml
Enfin, le plus délicat ici est de faire croître votre animation à partir du centre de chaque ligne. Je suppose que la ligne remplit l'écran horizontalement, donc, d'une part, la
android:pivotX
valeur sera statique. En revanche, vous ne pouvez pas modifier laandroid:pivotY
valeur par programme.Ce que je suggère, c'est que vous définissiez plusieurs animations ayant chacune une valeur de pourcentage différente sur l'
android:pivotY
attribut (et plusieurs thèmes référençant ces animations). Ensuite, lorsque l'utilisateur appuie sur la ligne, calculez la position Y en pourcentage de la ligne à l'écran. Connaissant la position en pourcentage, attribuez à votre boîte de dialogue un thème ayant laandroid:pivotY
valeur appropriée .Ce n'est pas une solution parfaite mais pourrait faire l'affaire pour vous. Si vous n'aimez pas le résultat, alors je vous suggère d'oublier
DialogFragment
et d'animer une simpleView
croissance à partir du centre exact de la ligne.Bonne chance!
la source
setStyle(DialogFragment.STYLE_NORMAL, R.style.MyCustomTheme)
suronCreate(bundle)
Voir: developer.android.com/reference/android/app/DialogFragment.htmlVérifiez ce code, cela fonctionne pour moi
// Faire glisser l'animation vers le haut
// Animation de diapositives dowm
// Style
// Fragment de dialogue intérieur
la source
DialogFragment a une méthode publique getTheme () que vous pouvez surcharger pour cette raison exacte. Cette solution utilise moins de lignes de code:
la source
AppTheme.NoActionBar
alors que DialogFragment utilise la valeur par défautAppTheme
. La méthode ci-dessus a résolu mon problème en ayant un thème cohérent à la fois dans le fragment et dans l'activité.Pour obtenir une boîte de dialogue plein écran avec animation, écrivez ce qui suit ...
Modes:
res / anim / slide_up.xml
res / anim / slide_down.xml
Code Java:
la source
Utilisez la vue décor dans onStart dans votre fragment de dialogue
la source
Dans DialogFragment, l'animation personnalisée est appelée onCreateDialog. «DialogAnimation» est un style d'animation personnalisé dans la réponse précédente.
la source
Avez-vous regardé la formation des développeurs Android sur le zoom d'une vue ? Cela pourrait être un bon point de départ.
Vous souhaitez probablement créer une classe personnalisée étendant
DialogFragment
pour que cela fonctionne.Jetez également un œil à la compatibilité de l'API Jake Whartons NineOldAndroids pour Honeycomb Animation jusqu'au niveau 1 de l'API.
la source
Si vous voulez travailler sur des API, vous devez le faire dans votre DialogFragemnt-> onStart et non dans onCreateDialog
la source
Ajouter ce code sur les valeurs anim
appelez styles.xml
Sur le code java: définir Onclick
configuration sur la méthode:
la source