Je veux faire défiler le Je pensais que l'évidence visible 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. p> listview code> 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). p>
ScrollBy CODE> ou
Scrollto code> 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 code> retourne toujours zéro même si j'ai défilé la liste en utilisant mon doigt.) p>
5 Réponses :
Le moyen pris en charge pour faire défiler un widget code> listview code> est: p>
http://developer.android.com/reference /android/widget/abslistview.html#smoothscrollToposition(int) P>
Cependant, étant donné que vous avez mentionné spécifiquement que vous souhaitez compenser la vue verticalement, vous devez appeler: P>
Notez que vous pouvez également utiliser http://developer.android.com/reference /android/widget/listview.html#smoothscrollbyoffset(int) p> mlistview.smoothscrolltoposition (position); code> p>
mlistview.setselectionFromtop (position, yoffset); code> p>
SmoothscrollByOffset (Yoffset) Code>. Cependant, il n'est pris en charge que sur API> = 11 P>
En outre, SmoothScroltoposition n'est qu'une API> = 8 :(
Voici un code de mon ListView code> Sous-classe. Il peut facilement être adapté afin qu'il puisse être utilisé dans le code d'activité.
getlistitemsheight () code> 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 () code> renvoie la position de défilement de pixels verticaux en cours et
ScrollListToy () code> Fait défiler la liste en position de pixel.
Si la taille ou le contenu de la liste change,
getlistitemsheight () code> doit être appelé à nouveau. p>
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 code> méthode.
Assurez-vous que l'accélération matérielle est activée. développeur.android.com/Guide/topics/graphics/hardware-accel. h tml
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); }
Pour l'instant, ListviewCompat est probablement une meilleure solution.
android.support.v4.widget.ListViewCompat.scrollListBy(@NonNull ListView listView, int y)
C'est ce que
ScrollBy code> 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.