web-dev-qa-db-fra.com

Android gridview hétérogène comme pinterest?

Est-il possible de créer un intérêt comme une mise en page sur Android en utilisant GridView? Je veux créer une galerie d'images en utilisant GridView mais je ne sais pas si c'est une bonne solution . Je ne veux pas créer trois LinearLayouts (je pense que cette solution n'est pas bonne: listview de style Pinterest ou gridview dans Android )

Des idées ;)?

enter image description here

57
radzio

Créez une mise en page comme suit

<ScrollView...>
<LinearLayout....
   Android:id="@+id/linear1"
   orientation="horizontal">

   <LinearLayout....
     Android:id="@+id/linear2"
     Android:layout_weight="0.33"
     orientation="vertical">

   <LinearLayout....
     Android:id="@+id/linear3"
     Android:layout_weight="0.33"
     orientation="vertical">

   <LinearLayout....
     Android:layout_weight="0.33"
     orientation="vertical">

</LinearLayout>
</ScrollView>

Ajoutez maintenant votre ImageView dynamiquement dans les mises en page

linear1 = (LinearLayout) findViewById(R.id.linear1);
linear2 = (LinearLayout) findViewById(R.id.linear2);
linear3 = (LinearLayout) findViewById(R.id.linear3);

for(int i=0;i<n;i++)
{
   ImageView iv = new ImageView(this);
   iv.setImageResource(R.id.icon);

   int j = count % 3;  <---- 
   if(j==0)
       linear1.addView(iv);
   else if(j==1)
       linear2.addView(iv);
   else
       linear3.addView(iv); 
}

sortie:

enter image description here

22
MAC

J'ai également joué avec cela (utilisé LinearLayout) mais à la fin, j'ai eu beaucoup de problèmes avec la consommation de mémoire (surtout quand j'ai dû recharger les éléments). J'ai opté pour une solution simple qui utilise deux ListViews synchronisés . De cette façon, je peux exploiter la mise en cache interne ce qui aide beaucoup. Pour ce faire, j'ai dû utiliser OnTouchListener et OnScrollListener qui synchronisent les listes. Voici un exemple:

https://github.com/vladexologija/PinterestListView

enter image description here

25
vladexologija
20
petrnohejl

Pour les visiteurs récents de cette question, je suggère d'utiliser RecyclerView avec StaggedGridLayoutManager. Il a plus qu'assez de fonctions et de flexibilité.

7
MohK

Un assistant autonome pour synchroniser le défilement de 2 ListViews: https://Gist.github.com/yanchenko/617979

6
yanchenko

J'utilise cette lib: https://github.com/huewu/PinterestLikeAdapterView .

Cela fonctionne plutôt bien. Le seul problème que j'ai, c'est que les setOnItemClickListener et setOnItemLongClickListener sont un peu bogués, alors j'ai placé les écouteurs directement sur convertView.

3
emerix

Cette bibliothèque provient de l'application Etsy: https://github.com/etsy/AndroidStaggeredGrid

2
HannahMitt