3
votes

Défilement en 2 dimensions pour une grille sous Android

J'ai essayé de créer une grille (potentiellement infinie) pour faire défiler sans succès jusqu'à présent. J'ai du mal à rendre un GridView qui est hors de l'écran. C'est pourquoi je voudrais demander s'il existe un autre composant dans Android qui pourrait être utilisé pour cette tâche?

 grid to scroll in Android


2 commentaires

Pourriez-vous ajouter quelques exigences supplémentaires, s'il vous plaît? Que devrait être sur la grille? À quelle fréquence sera-t-il mis à jour? S'agit-il de placer des éléments graphiques là-bas, puis de faire défiler simplement ou faut-il également déplacer ces éléments vers des positions différentes?


essayez ceci stackoverflow.com/a/16303262/6587502


3 Réponses :


0
votes

Ce lien peut-il vous être utile

https://github.com/jess-anders/two-way-gridview

<?xml version="1.0" encoding="utf-8"?>
<com.jess.ui.TwoWayGridView
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:background="#E8E8E8"
    android:id="@+id/gridview"
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"
    app:cacheColorHint="#E8E8E8"
    app:columnWidth="80dp"
    app:rowHeight="80dp"
    app:numColumns="auto_fit"
    app:numRows="auto_fit"
    app:verticalSpacing="16dp"
    app:horizontalSpacing="16dp"
    app:stretchMode="spacingWidthUniform"
    app:scrollDirectionPortrait="vertical"
    app:scrollDirectionLandscape="horizontal"
    app:gravity="center"/>


2 commentaires

Merci! Je vais vérifier cela. Mais ce widget n'est-il pas fait pour faire défiler verticalement OU horizontalement? Cela fait-il les deux?


pourquoi cela fonctionne-t-il? Veuillez mettre en évidence les sections pertinentes ou expliquer l'extrait de code



2
votes

Je voudrais suggérer ceci evrencoskun / TableView .

Il vous permet de faire défiler les deux horizontalement et verticalement.

<com.evrencoskun.tableview.TableView
android:id="@+id/content_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>


2 commentaires

Je vous remercie! Cela a l'air très intéressant, je vais certainement le vérifier!


on dirait que la table n'est pas tout à fait ce dont j'ai besoin. J'ai besoin d'une grille pour placer des objets graphiques. Je vais voir si je peux proposer un composant personnalisé.



4
votes

Selon vos besoins, cela ressemble à un RecyclerView de type table avec un défilement infini ou un moteur de jeu 2D (au cas où cela vaut la peine de l'apporter pour cette fonctionnalité) pourrait être une solution optimale pour vous.

<₹RecyclerView

Si vous souhaitez simplement stocker des objets (graphiques ou non - cela n'a pas vraiment d'importance, si vous pouvez les emballer dans les cellules), vous pouvez utiliser une sorte d'adaptateur RecyclerView avec une extension pour un défilement illimité.

De cette façon, vous pouvez économiser de la mémoire en utilisant le mécanisme de recyclage des vues. En utilisant les mécanismes de notification détaillés (comme l'élément déplacé / supprimé), vous pouvez même ajouter des animations si les objets se déplacent.

En plus d'une solution proposée comme evrencoskun / TableView , je suggérerais de jeter un coup d'œil sur la comment GridLayoutManger fonctionne globalement, voici le premier article sur trois dans un examen relativement approfondi du fonctionnement de RecyclerView et de son LayoutManager , afin que vous puissiez personnaliser une solution plus légère pour votre cas particulier. Il existe une application de démonstration simple , "Liste bidirectionnelle fixe" avec l'option "Grande grille" peut vous donner une idée de ce qui sera construit. Vous devrez l'étendre pour qu'il fonctionne avec des listes infinies, mais cela devrait être plus simple lorsque vous comprenez les éléments internes.

Moteur 2D

Si l'idée est d'avoir des graphiques sur les tuiles avec des tailles arbitraires et que la fonctionnalité est essentielle pour votre application, il peut être judicieux d'envisager d'utiliser un moteur 2d comme libdx. Ils ont de nombreux exemples d'utilisation, mais bien sûr, cela vous coûtera un peu de stockage et du temps pour l'apprendre: wike libgdx

Propre solution

Si aucun des deux ne répond à vos besoins, je pense que vous devrez trouver votre propre solution à partir de zéro. N'oubliez pas de l'optimiser, car toute chose infinie dans Android, en particulier liée aux graphiques, peut facilement entraîner des erreurs de manque de mémoire.


0 commentaires