Avec la nouvelle API d'animation introduite dans Android 3.0 (Honeycomb), il est très simple de créer de telles animations.
Faire glisser View
vers le bas d'une distance:
view.animate().translationY(distance);
Vous pouvez ensuite faire glisser le View
dos à sa position d'origine comme ceci:
view.animate().translationY(0);
Vous pouvez également combiner facilement plusieurs animations. L'animation suivante fera glisser un View
vers le bas de sa hauteur et la fondra en même temps:
// Prepare the View for the animation
view.setVisibility(View.VISIBLE);
view.setAlpha(0.0f);
// Start the animation
view.animate()
.translationY(view.getHeight())
.alpha(1.0f)
.setListener(null);
Vous pouvez ensuite estomper l' View
arrière et le faire revenir à sa position d'origine. Nous avons également défini un AnimatorListener
afin que nous puissions définir la visibilité du View
dos sur GONE
une fois l'animation terminée:
view.animate()
.translationY(0)
.alpha(0.0f)
.setListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
view.setVisibility(View.GONE);
}
});
View
lorsque sa visibilité est définie surView.GONE
? Si vous définissez sa visibilité sur autre chose,View.VISIBLE
leView
ne sera pas visible. Je ne comprends pas ce que vous demandez. Si vous voulez que votre animation soit visible alors ne définissez pas la visibilité duView
àView.GONE
.onAnimationEnd
est appelé à chaque fois pour une animation multi-produisant, ce qui signifie que l'onAnimationEnd
on appelle également lorsque la vue se montre, qui fixe sa visibilité Gone, etc.J'avais du mal à comprendre et à appliquer la réponse acceptée. J'avais besoin d'un peu plus de contexte. Maintenant que je l'ai compris, voici un exemple complet:
MainActivity.java
activity_mail.xml
Remarques
INVISIBLE
.INVISIBLE
. Si vous n'animez pas complètement hors écran, vous pouvez ajouter une animation alpha et définir la visibilité avec unAnimatorListenerAdapter
.la source
.setVisibility(View.INVISIBLE);
la fonction glisser vers le haut ne fonctionnera pas comme prévu visuellement.Translate Animation
déplace la vue. Si vous souhaitez animer la vue comme sa mise à l'échelle elle-même, utilisezScaleAnimation anim = new ScaleAnimation(1, 1, 0, 1)
Maintenant, les animations de changement de visibilité doivent être effectuées via le
Transition API
module de support (androidx). Appelez simplement la méthode TransitionManager.beginDelayedTransition avec la transition Slide, puis changez la visibilité de la vue.activity_main.xml
Vérifiez cette réponse avec un autre exemple de transition par défaut et personnalisé.
la source
minSdkVersion 21
androidx
package. Cela fonctionne très bien sur la pré 21 api.Solution la plus simple: placez-vous
android:animateLayoutChanges="true"
sur le conteneur contenant vos vues.Pour le mettre dans un certain contexte: Si vous avez une disposition comme ci-dessous, toutes les modifications de visibilité des vues dans ce conteneur seront animées automatiquement.
Vous pouvez trouver plus de détails à ce sujet dans Animation des changements de mise en page - Développeur Android
la source
Vous pouvez démarrer le correct
Animation
lorsque la visibilité desLinearLayout
modifications en créant une nouvelle sous-classe deLinearLayout
et en remplaçantsetVisibility()
pour démarrer leAnimations
. Considérez quelque chose comme ceci:la source
View
responsable de ses propres animations qui n'est JAMAIS ce que vous voulez. Imaginez que vous souhaitez animer leView
différemment dans une autre partie de votre application. Que faites-vous alors? Ajouter un drapeau pour ne pas animer automatiquement la visibilité? Sous-classer leView
et remplacersetVisibility()
pour supprimer l'animation? Ou encore pire implémentersetVisibility()
avec une autre animation? Cela devient de plus en plus laid à partir de là. N'utilisez pas cette "solution".Kotlin
Sur la base de la réponse de Suragch , voici une manière élégante d'utiliser l'extension View:
Et puis partout où vous voulez l' utiliser, vous avez juste besoin
myView.slideUp()
oumyView.slideDown()
la source
la source
setAlpha
?vous pouvez faire glisser n'importe quelle vue ou disposition en utilisant le code ci-dessous dans l'application Android
la source
Utilisez cette classe:
la source
Utilisation d'ObjectAnimator
la source
0.toFloat()
peut aussi être simplement0f
J'avais un cas d'angle où la hauteur de ma vue était toujours
zero
si ...la source
Voici ma solution. Obtenez simplement une référence à votre vue et appelez cette méthode:
Pas besoin de faire autre chose =)
la source
Réponse de Suragch dans Kotlin. Cela a fonctionné pour moi.
}
la source
Vous pouvez utiliser les trois simples lignes de code pour afficher l'animation ...
la source
Avec les extensions Kotlin, vous pouvez utiliser ceci:
Exemple pour l'extension:
la source
Un des moyens simples:
la source