8
votes

Faites défiler une liste de pixels à Android

Je veux faire défiler le listview dans Android par nombre de pixels. Par exemple, je souhaite faire défiler la liste 10 pixels vers le bas (de sorte que le premier élément de la liste ait ses 10 lignes de pixel Top cachées).

Je pensais que l'évidence visible ScrollBy ou Scrollto Méthodes sur ListView ferait le travail, mais ils ne font pas, mais ils font défiler toute la liste à tort (en fait, Le getcrolly retourne toujours zéro même si j'ai défilé la liste en utilisant mon doigt.)

Ce que je fais, c'est que je capture des événements de trackball et je souhaite faire défiler la liste de liste en douceur en fonction du mouvement du trackball.


2 commentaires

C'est ce que ScrollBy est censé faire. Pourriez-vous poster votre code Java?


Je pense que Scrollby est en quelque sorte gâcher la liste de liste. J'ai expérimenté celui-là aussi. Il déplace les événements tactiles par la quantité de ScrollBy .... Donc, si vous définissez le roublage Y par 10 par exemple, le prochain événement tactile de la liste sera commercialisé de 10 pixels sous l'emplacement de l'Actuall Touch. Désolé je ne sais pas de Une meilleure façon, mais peut-être qu'il y a un moyen de compenser ces choses avec méthode d'Aongouch sur la liste de liste.


5 Réponses :


12
votes

Le moyen pris en charge pour faire défiler un widget listview est:

mlistview.smoothscrolltoposition (position);

http://developer.android.com/reference /android/widget/abslistview.html#smoothscrollToposition(int)

Cependant, étant donné que vous avez mentionné spécifiquement que vous souhaitez compenser la vue verticalement, vous devez appeler:

mlistview.setselectionFromtop (position, yoffset);

http://developer.android. Com / Référence / Android / Widget / ListView.html # SetSelectionFromtop (int,% 20int)

Notez que vous pouvez également utiliser SmoothscrollByOffset (Yoffset) . Cependant, il n'est pris en charge que sur API> = 11

http://developer.android.com/reference /android/widget/listview.html#smoothscrollbyoffset(int)


1 commentaires

En outre, SmoothScroltoposition n'est qu'une API> = 8 :(



3
votes

Voici un code de mon ListView Sous-classe. Il peut facilement être adapté afin qu'il puisse être utilisé dans le code d'activité.

getlistitemsheight () renvoie la hauteur totale de pixels de la liste et remplit un tableau avec des compensations de pixels verticaux de chaque élément. Bien que ces informations soient valides, getlistscrolly () renvoie la position de défilement de pixels verticaux en cours et ScrollListToy () Fait défiler la liste en position de pixel. Si la taille ou le contenu de la liste change, getlistitemsheight () doit être appelé à nouveau. xxx


0 commentaires

10
votes

Si vous regardez la source de la méthode ScrollListBy () Ajouté dans l'API 19, vous verrez que vous pouvez utiliser le package Scoped TrackMotionscroll méthode. XXX


1 commentaires

Assurez-vous que l'accélération matérielle est activée. développeur.android.com/Guide/topics/graphics/hardware-accel. h tml



0
votes

Si vous souhaitez déplacer par pixels, vous pouvez utiliser ce

public void scrollBy(ListView l, int px){
    l.setSelectionFromTop(l.getFirstVisiblePosition(),l.getChildAt(0).getTop() - px);
}


0 commentaires

1
votes

Pour l'instant, ListviewCompat est probablement une meilleure solution.

android.support.v4.widget.ListViewCompat.scrollListBy(@NonNull ListView listView, int y)


0 commentaires