¿Android gridview heterogéneo como pinterest? [cerrado]

¿Es posible crear un diseño tipo pinterest en Android usando GridView? Quiero crear una galería de imágenes usando GridView pero no estoy seguro si es una buena solución. no quiero crear tres LinearLayouts (Creo que esta solución no es buena: Estilo de Pinterest listview o gridview en android)

Algunas ideas ;)?

enter image description here

preguntado el 31 de julio de 12 a las 10:07

No estoy seguro si eso es una vista de cuadrícula en la imagen. -

GridView no funcionará aquí porque height no es igual para todas las imágenes -

Realmente se ve como tres columnas de imageViews para mí. -

3 ListViews podría ser mejor porque puede hacer algo de reciclaje. Sin embargo, también puede provocar un comportamiento no deseado de la interfaz de usuario dado que puede desplazarse por cada columna de forma independiente. -

Creo que el mejor enfoque sería crear su propia vista y manejar el código de dibujo usted mismo. -

7 Respuestas

Respondido el 18 de Septiembre de 13 a las 11:09

¿Hay algún ejemplo con desplazamiento horizontal? - Goretes

usé la biblioteca staggeredGridView en mi aplicación play.google.com/store/apps/details?id=com.taureano.amazicons . Funcionó muy bien, así que vota esta respuesta. Hay un pequeño error en el cambio de orientación en la biblioteca, pero encontré la solución en el desbordamiento de la pila. - swati rawat

Crear diseño como el siguiente

<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>

Ahora agregue su ImageView dinámicamente en diseños

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); 
}

salida:

enter image description here

Respondido 31 Jul 12, 10:07

Sé que es posible, pero no quiero usar LinearyLayout debido a un mal reciclaje de vistas. Esta solución no funcionará bien con muchas vistas de imágenes. - Radzio

está bien, como quieras, pero he hecho esto y estoy cargando 120 imágenes desde la URL: dirección MAC

Esta es una solución muy ordenada. - jmishra

¿Se ejecuta rápido sin problemas con el consumo de memoria? - Nam vu

esta solución funcionaría, pero si hay muchos elementos, podría causar lentitud en las inicializaciones y OOM. He agregado una posible solución que usa la misma idea de un adapterView. - desarrollador de Android

Para los visitantes recientes a esta pregunta, sugeriría usar RecyclerView con StaggedGridLayoutManager. Es tener funciones y flexibilidad más que suficientes.

contestado el 13 de mayo de 15 a las 08:05

También he estado jugando con esto (utilicé LinearLayout) pero al final tuve muchos problemas con el consumo de memoria (especialmente cuando tuve que recargar los elementos). Me decidí por una solución simple que usa dos sincronizados Vistas de lista. De esta manera puedo explotar interna el almacenamiento en caché lo que ayuda mucho Para hacer esto tuve que usar OnTouchListener y OnScrollListener que sincronizan listas. Aquí hay un ejemplo:

https://github.com/vladexologija/PinterestListView

enter image description here

respondido 21 nov., 12:13

¿Puedes publicar el código de muestra para esto? - eugene

¿Qué es exactamente lo que necesita? ¿Fuente de toda la actividad? - vladexologija

Bueno, nada más que el código anterior en realidad. Siendo un desarrollador de Android novato, me llevará un tiempo comprender los conceptos que presentaste. - eugene

Ahí tienes Todavía hay muchas cosas por hacer (corregir algunos errores, optimizar, simplificar...) pero esta versión funciona bien. ¡Lo más importante es que utiliza el reciclaje! - vladexologija

@vladexologija Muchas gracias por una publicación tan buena. - San

Un ayudante independiente para sincronizar el desplazamiento de 2 ListViews: https://gist.github.com/yanchenko/6179793

Respondido 08 ago 13, 01:08

Estoy usando esta biblioteca: https://github.com/huewu/PinterestLikeAdapterView.

Funciona bastante bien. El único problema que tengo es que el setOnItemClickListener y setOnItemLongClickListener tienen un poco de errores, así que configuré a los oyentes directamente en convertView.

Respondido 09 ago 13, 04:08

Esta biblioteca proviene de la aplicación de Etsy: https://github.com/etsy/AndroidStaggeredGrid

Respondido el 03 de enero de 14 a las 13:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.