2010-06-17 6 views
0

J'essaie de faire un ScrollView avec une liste de nombres que l'utilisateur peut sélectionner. Après que l'utilisateur touche et défile, une fois que le doigt est levé, je veux que le défilement s'aligne sur l'élément au milieu du ScrollView et me donne la sortie. Mon ScrollView contient une disposition linéaire verticale avec des objets TextView. La taille verticale de ScrollView est d'environ 60sp.Comment changer la position de ScrollView après le toucher?

Je pense que cela impliquerait le ScrollView.onTouch avec un ACTION_UP, mais je ne sais pas comment l'utiliser. En outre, existe-t-il un moyen d'obtenir l'index ou la valeur d'un élément en fonction d'une position dans la liste?

Merci!

Répondre

0

Utilisez-vous ListView? Voir Hello ListView pour commencer avec un. Je ne suis pas sûr de ce que vous voulez dire exactement en cliquant sur l'élément au milieu, mais en faisant défiler un ListView, je crois que vous finirez toujours par le haut de la liste, aligné avec le haut d'un élément. En ce qui concerne l'index ou la position de l'élément, un élément ListView a deux concepts. La position est l'emplacement de l'élément dans la liste entière (généralement le ArrayAdapter qui a été utilisé pour remplir le ListView). L'identifiant est la position visible sur l'écran. Ainsi, si l'élément supérieur de l'écran aurait l'ID 0, mais pourrait avoir la position 20. Voir Javadocs

+0

À l'heure actuelle ce que je fais est de faire un ScrollView avec un linearLayout comme son enfant. A l'intérieur du LinearLayout il y a un tas de chiffres (100,125,150 ... 1000). L'utilisateur va toucher son doigt vers le bas et faire glisser jusqu'à ce que le nombre désiré soit dans (ou le plus proche) du milieu. Une fois le doigt enlevé, ACTION_UP, le numéro le plus proche du centre sera aligné exactement au milieu (par l'intermédiaire de smoothScrollTo) et le numéro du milieu sera sélectionné et utilisé. C'est ce que j'essaie de faire. – Matt

+0

J'ai ce genre de travail en ce moment. Ce que je fais est 1) sur ACTION_UP je reçois la position actuelle du ScrollView avec .getScrollY(). 2) J'utilise des maths pour obtenir la position de défilement désirée: ((int) Math.round (posY/20) * 20) + 10. Notez que les nombres 20 représentent la distance approximative entre les éléments et 10 le décalage pour le milieu . 3) J'utilise smoothScroll pour se déplacer. 4) J'utilise des maths pour comprendre quel est le numéro de la liste au milieu de la position. 5) Je reçois la vue de texte avec (TextView) findViewById (R.id. (listview.getChildAt (x) .getId())). 6) Je convertis le texte en int. – Matt

+0

Content de l'avoir fait fonctionner. Y at-il une raison pour laquelle vous ne voulez pas utiliser ListView? Cela semble mieux correspondre à votre situation qu'un scrollView. Aussi, es-tu dépendant des maths en pixels? Gardez à l'esprit que les différents téléphones ont des résolutions différentes, donc cela va probablement tomber en panne. –

Questions connexes