Comment puis-je animer les éléments RecyclerView lorsqu'ils apparaissent?
L'animateur d'élément par défaut s'anime uniquement lorsqu'une donnée est ajoutée ou supprimée après la définition des données du recycleur. Je suis un nouveau développeur d'applications et je n'ai aucune idée par où commencer.
Des idées pour y parvenir?
android
android-layout
android-recyclerview
PaulNunezM
la source
la source
recyclerView.scheduleLayoutAnimation()
après la modification de l'ensemble de données, sinon, l'animation ne fonctionnerait pas.ÉDITER :
Selon la documentation d'ItemAnimator :
Donc, à moins que vous n'ajoutiez vos articles un à un
RecyclerView
et que vous actualisiez la vue à chaque itération, je ne pense pas que ceItemAnimator
soit la solution à votre besoin.Voici comment animer les
RecyclerView
éléments lorsqu'ils apparaissent à l'aide d'un CustomAdapter:Et votre custom_item_layout ressemblerait à ceci:
Pour plus d'informations sur CustomAdapters et
RecyclerView
, reportez-vous à cette formation sur la documentation officielle .Problèmes de défilement rapide
L'utilisation de cette méthode peut entraîner des problèmes de défilement rapide. La vue pourrait être réutilisée pendant que l'animation est en cours. Afin d'éviter cela, il est recommandé d'effacer l'animation lorsqu'elle est détachée.
Sur CustomViewHolder:
Ancienne réponse:
Jetez un œil au repo de Gabriele Mariotti , je suis sûr que vous trouverez ce dont vous avez besoin. Il fournit des ItemAnimators simples pour RecyclerView, tels que SlideInItemAnimator ou SlideScaleItemAnimator.
la source
onViewDetachedFromWindow
et appelleclearAnimation
la vue. Le problème est qu'il y a des animations en cours d'exécution lorsque RecyclerView essaie de réutiliser la vue.J'ai animé le fondu des
Recyclerview
éléments lorsqu'ils apparaissent pour la première fois, comme indiqué dans le code ci-dessous. Peut-être que cela sera utile à quelqu'un.Vous pouvez également remplacer
setFadeAnimation()
par ce qui suitsetScaleAnimation()
pour animer l'apparence des éléments en les mettant à l'échelle à partir d'un point:Le code ci-dessus a quelques verrues dans la mesure où lorsque vous faites défiler les
RecyclerView
éléments, ils s'effacent toujours ou se dégradent. Si vous le souhaitez, vous pouvez ajouter du code pour permettre à l'animation de se produire uniquement lors de la création du fragment ou de l'activité contenant leRecyclerView
(par exemple, obtenir l'heure système lors de la création et autoriser l'animation uniquement pour les premières millisecondes FADE_DURATION).la source
J'ai créé une animation à partir de la réponse de pbm avec peu
modification
de choses pour faire fonctionner l'aninmation une seule foisen d'autres termes,
Animation appear with you scroll down only
et
onBindViewHolder
appeler la fonctionla source
lastPosition
représente le nombre de vues rendues, donc c'est le début de sa valeur-1
, chaque fois qu'une nouvelle vue est rendue, nous commençons une animation etVous pouvez ajouter un
android:layoutAnimation="@anim/rv_item_animation"
attribut pourRecyclerView
aimer ceci:merci pour l'excellent article ici: https://proandroiddev.com/enter-animation-using-recyclerview-and-layoutanimation-part-1-list-75a874a5d213
la source
Un bon point de départ est le suivant: https://github.com/wasabeef/recyclerview-animators/blob/master/animators/src/main/java/jp/wasabeef/recyclerview/adapters/AnimationAdapter.java
Vous n'avez même pas besoin de la bibliothèque complète, cette classe suffit. Ensuite, si vous implémentez simplement votre classe Adapter en donnant un animateur comme celui-ci:
vous verrez des éléments apparaître du bas pendant leur défilement, évitant également le problème avec le défilement rapide.
la source
L'animation d'éléments dans la vue de recyclage lorsqu'ils sont liés dans l'adaptateur n'est peut-être pas la meilleure idée car cela peut entraîner l'animation des éléments de la vue de recyclage à différentes vitesses. Dans mon cas, l'élément à la fin de la vue de recyclage s'anime plus rapidement que ceux du haut car ceux du haut doivent continuer à voyager, ce qui le rendait désordonné.
Le code d'origine que j'ai utilisé pour animer chaque élément dans la vue de recyclage peut être trouvé ici:
http://frogermcs.github.io/Instagram-with-Material-Design-concept-is-getting-real/
Mais je vais copier et coller le code en cas de rupture du lien.
ÉTAPE 1: définissez cela dans votre méthode onCreate afin de vous assurer que l'animation ne s'exécute qu'une seule fois:
ÉTAPE 2: Vous devrez mettre ce code dans la méthode où vous souhaitez démarrer l'animation:
Dans le lien, l'auteur anime les icônes de la barre d'outils, il l'a donc mis dans cette méthode:
ÉTAPE 3: Maintenant, écrivez la logique de startIntroAnimation ():
Mon alternative préférée:
Je préfère animer l'ensemble du recyclage au lieu des éléments à l'intérieur du recyclage.
Les ÉTAPES 1 et 2 restent les mêmes.
À l'ÉTAPE 3, dès que votre appel API revient avec vos données, je lance l'animation.
Cela animerait l'intégralité de votre recyclage afin qu'il vole depuis le bas de l'écran.
la source
latestPostRecyclerview
?Créez cette méthode dans votre adaptateur Recyclerview
Et enfin, ajoutez cette ligne de code dans onBindViewHolder
setZoomInAnimation(holder.itemView);
la source
En 2019, je suggérerais de mettre toutes les animations d'objets dans ItemAnimator.
Commençons par déclarer l'animateur dans la vue recycleur:
Déclarez ensuite l'animateur personnalisé,
Semblable à ceux ci-dessus, il y en a un pour la disparition
animateDisappearance
, pour l'ajoutanimateAdd
, pour le changementanimateChange
et le déplacementanimateMove
.Un point important serait d'appeler les bons répartiteurs d'animation en leur sein.
la source
Prolonge simplement votre adaptateur comme ci-dessous
Et ajoutez une super méthode à onBindViewHolder
C'est un moyen automatisé de créer un adaptateur animé comme "Basheer AL-MOMANI"
la source
Je pense qu'il vaut mieux l'utiliser comme ceci: (dans l' adaptateur RecyclerView, remplacez juste une méthode)
Si vous voulez que chaque animation soit attachée dans RV.
la source