105 votes

Afficher le DialogFragment avec une animation qui croît à partir d'un point

Je montre un DialogFragment lorsque l'utilisateur tape sur une ligne dans un fichier ListView . J'aimerais animer l'affichage de la boîte de dialogue pour qu'elle se développe à partir du centre de la ligne. Un effet similaire peut être observé lors de l'ouverture d'un dossier depuis le lanceur.

Une idée que j'ai eue est une combinaison de TranslateAnimation y ScaleAnimation . Y a-t-il un autre moyen ?

4voto

Colateral Points 1517

Si vous voulez travailler avec des API, vous devez le faire dans votre DialogFragemnt->onStart et non dans onCreateDialog.

@Override
    public void onStart() 
    {
        if (getDialog() == null) 
        {
            return;
        }

        getDialog().getWindow().setWindowAnimations(
                  R.style.DlgAnimation);

        super.onStart();
    }

4voto

Horatio Points 1024

Utilisez la vue décorative à l'intérieur de onStart dans votre fragment de dialogue.

@Override
public void onStart() {
    super.onStart();

    final View decorView = getDialog()
            .getWindow()
            .getDecorView();

    decorView.animate().translationY(-100)
            .setStartDelay(300)
            .setDuration(300)
            .start();

}

4voto

Erik Melkersson Points 660

Note : Ceci n'est qu'un complément aux autres réponses.

Quelle que soit la solution que vous choisissez, vous risquez d'avoir le même problème que moi.

Je dois désinstaller le jeu de mon appareil de développement avant d'installer la nouvelle version pour que les changements d'animation prennent effet.

Je ne suis pas sûr de la raison mais je suppose que cela a à voir avec le déploiement optimisé sur Android studio qui ne reconnaît pas les changements.

2voto

hotveryspicy Points 21181

Je pense que ce n'est pas possible avec le gestionnaire de fragments intégré comme vous le voyez. setCustomAnimations (int enter, int exit, int popEnter, int popExit) il prend le paramètre comme int Ressource c.-à-d. de res->anim mais vous ne pouvez pas créer une animation de manière programmatique et la définir.

public abstract FragmentTransaction setCustomAnimations (int enter, int exit, int popEnter, int popExit)

Votre exigence peut être de passer le point de contact de la vue de la ligne sélectionnée (x,y) mais avec xml vous ne pouvez pas attribuer de valeur au moment de l'exécution.

1voto

greve Points 666

Avez-vous regardé la formation de développeur Android sur Zoomer sur une vue ? Ce pourrait être un bon point de départ.

Vous voulez probablement créer une classe personnalisée étendant DialogFragment pour que ça marche.

Jetez aussi un coup d'oeil à Jake Wharton. NineOldAndroids pour la compatibilité de l'API d'animation Honeycomb jusqu'au niveau 1 de l'API.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X