Détection du sens de défilement dans l'adaptateur (haut / bas)
Je suis en train d'imiter l'application Google Plus dans mon projet, comme cela semble être la référence maintenant.
La listview effet lorsque le défilement est vraiment sympa et j'aimerais faire quelque chose de similaire.
J'ai commencé avec le LayoutAnimationController
http://android-er.blogspot.be/2009/10/listview-and-listactivity-layout.html
LayoutAnimationController controller
= AnimationUtils.loadLayoutAnimation(
this, R.anim.list_layout_controller);
getListView().setLayoutAnimation(controller);
et qui semble mauvais, car tous les éléments sont animés:
Donc j'ai fini par l'aide de la getView de l'adaptateur et de l'utilisation de ce:
AnimationSet set = new AnimationSet(true);
Animation animation = new AlphaAnimation(0.0f, 1.0f);
animation.setDuration(800);
set.addAnimation(animation);
animation = new TranslateAnimation(
Animation.RELATIVE_TO_SELF, 0.0f,Animation.RELATIVE_TO_SELF, 0.0f,
Animation.RELATIVE_TO_SELF, 1.0f,Animation.RELATIVE_TO_SELF, 0.0f
);
animation.setDuration(600);
set.addAnimation(animation);
row.startAnimation(set);
Le résultat est génial et je suis vraiment heureux avec elle!
Malheureusement, il ne fonctionne que quand j'ai faites défiler de haut en bas de la liste!
Je veux le faire fonctionner lorsque le défilement de l'autre côté, j'ai besoin de changer un peu la TranslateAnimation.
Donc ma question, est-il un moyen de détecter si j'ai faites défiler vers le haut ou vers le bas dans ma carte?
source d'informationauteur Waza_Be
Vous devez vous connecter pour publier un commentaire.
Attribuer une
OnScrollListener
à votreListView
. Créer un drapeau qui indique si l'utilisateur fait défiler vers le haut ou vers le bas. Définir une valeur appropriée pour le drapeau en vérifiant si le courant première élément visible de la position est égale à plus ou de moins que le précédent première élément visible de la position. Mettre à l'intérieuronScrollStateChanged()
.Exemple de code:
Vérifier si
mIsScrollingUp
est vrai ou faux dansgetView()
et d'attribuer les animations en conséquence.J'ai fini par le faire:
Plus complexe (solution de travail avec de longs articles à la hauteur dans listview)
Créer des listview
Remplacer onScroll
Accepté la réponse n'a pas vraiment de "détecter" le défilement vers le haut ou vers le bas. Il ne fonctionnera pas si le courant élément visible est vraiment énorme. À l'aide de
onTouchListener
est le chemin à parcourir.C'est l'extrait de code que j'ai utilisé:
De l'essayer . J'espère que cela vous aide . La Logique De @Gal Rom Réponse .
Voici ma démarche: Il vous obtient plus de rétroaction immédiate sur la façon dont beaucoup vous avez fait défiler:
OnScroll
vous pouvez juste obtenir la Top position du premier élément à votre liste. C'est assez fiable pour obtenir réelle de la position de défilement de l'information immédiatement.J'ai utilisé cette solution beaucoup plus simple:
...
Basé sur la position du dernier élément visible-je décider Listview est à la hausse ou à la baisse.