Comment obtenir une position de défilement à partir de GridView?

J'essaie de créer mes propres fonctions de visualisation de la grille – s'étendant sur GridView . La seule chose que je ne peux pas résoudre est de savoir comment obtenir la position de défilement actuelle du GridView .

getScrollY() renvoie toujours 0, et les onScrollListener de onScrollListener ne sont qu'une gamme de vues visibles pour enfants, et non la position de défilement réelle.

  • Sélection de texte Android dans le Webview
  • Android ListView avec plusieurs colonnes alignées correctement
  • Faire un dossier dans une carte SD avec un mot de passe protégé: Android
  • Forcer à utiliser le même certificat pour signer différents "buildTypes" qui sont configurés pour un "produitFlavor" particulier?
  • Gradle échoue à construire avec "Missing project_info object"
  • Puis-je utiliser un bouton de donation PayPal dans mon application Android dans Google Play?
  • Cela ne semble pas très difficile, mais je ne peux pas trouver une solution sur le Web.

    Quelqu'un ici qui a une idée?

  • Appareil photo Android - Parfois, lorsque je prends des photos, l'application gèle et la caméra n'est pas utilisable
  • Emballage de HTML dans une application pour Android
  • Masquage d'un Drawable / Bitmap sur Android
  • Comment créer l'activité de réglage pour afficher la moitié de l'écran en bas?
  • Le pied de page fixe et toujours visible ci-dessous ListFragment
  • Comment télécharger les anciens services Google Play?
  • 2 Solutions collect form web for “Comment obtenir une position de défilement à partir de GridView?”

    Je n'ai trouvé aucune bonne solution, mais celle-ci est au moins capable de maintenir la position de défilement du pixel parfaitement:

     int offset = (int)(<your vertical spacing in dp> * getResources().getDisplayMetrics().density); int index = mGrid.getFirstVisiblePosition(); final View first = container.getChildAt(0); if (null != first) { offset -= first.getTop(); } // Destroy the position through rotation or whatever here! mGrid.setSelection(index); mGrid.scrollBy(0, offset); 

    Par cela, vous ne pouvez pas obtenir une position de défilement absolue, mais un élément visible + paire de déplacement.

    REMARQUES:

    • Ceci est destiné à API 8+.
    • Vous pouvez obtenir avec mGrid.getVerticalSpacing () dans API 16+.
    • Vous pouvez utiliser mGrid.smoothScrollToPositionFromTop (index, offset) dans API 11+ au lieu des deux dernières lignes.

    J'espère que cela vous aide et vous donne une idée.

    Sur Gingerbread, GridView getScrollY () fonctionne dans certaines situations, et dans certains cas non. Voici une alternative basée sur la première réponse. La hauteur de la ligne et le nombre de colonnes doivent être connus (et toutes les lignes doivent avoir une hauteur égale):

     public int getGridScrollY() { int pos, itemY = 0; View view; pos = getFirstVisiblePosition(); view = getChildAt(0); if(view != null) itemY = view.getTop(); return YFromPos(pos) - itemY; } private int YFromPos(int pos) { int row = pos / m_numColumns; if(pos - row * m_numColumns > 0) ++row; return row * m_rowHeight; } 

    La première réponse donne également une bonne idée de la façon de faire défiler un pixel dans un GridView. Voici une solution généralisée, qui fera défiler un équivalent GridView pour scrollTo (0, scrollY):

     public void scrollGridToY(int scrollY) { int row, off, oldOff, oldY, item; // calc old offset: oldY = getScrollY(); // getGridScrollY() will not work here row = oldY / m_rowHeight; oldOff = oldY - row * m_rowHeight; // calc new offset and item: row = scrollY / m_rowHeight; off = scrollY - row * m_rowHeight; item = row * m_numColumns; setSelection(item); scrollBy(0, off - oldOff); } 

    Les fonctions sont implémentées dans un GridView sous-classé, mais elles peuvent être facilement recodées comme externes.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.