gridView con diferentes tamaños de celdas, estilo pinterest

Fondo

Vista en cuadrícula es una clase que se extiendeAdapterView , lo que significa que muestra celdas en un estilo de cuadrícula de manera eficiente, reciclando las vistas antiguas para que se muestren como nuevas cuando el usuario las desplaza.

El problema

A veces, desearía obtener una interfaz de usuario especial, que se parece a la interfaz de usuario de Windows Phone Tiles, con celdas de diferentes tamaños una encima de la otra.

Algo como esto:

AABB
AACC
AADD
AADD

cada letra representa una parte de su celda, por lo que la celda A es 2x4, la celda B y la celda C toman 2x1 cada una, y la celda D es 2x2.

Podría ser incluso más que eso, donde la celda D terminó un poco por encima de lo que he mostrado, y justo debajo de ella hay otra celda, por lo que el final de D y el final de A no son necesariamente alineados.

Un ejemplo de una aplicación que tiene este estilo esinterés .

GridView no permite tal cosa.

De hecho, todas las soluciones que he probado tienen problemas. Me gustaría preguntar si hay otras alternativas o mejores soluciones.

Lo que he encontrado

Hay varias formas de manejar este problema:

Como una clase que se extiendeAdapterView Vista en cuadrícula tiene la capacidad de tener un tipo para cada elemento (utilizando elBaseAdapter), que le permitiría configurar la disposición de la celda.

Sin embargo, todavía te limita ya que obtendrás filas de artículos, uno debajo del otro. Tienes que tenerlos alineados.

Diseño de cuadrícula Es un diseño relativamente nuevo, y es bastante flexible. Google ha publicado una biblioteca de compatibilidad agradable para ella, que admite API7 y superior.

Sin embargo, no utiliza ningún reciclaje de vistas, por lo que es una mala elección en caso de que desee mostrar muchos elementos.

Si tiene muchos elementos, deberá crear todas las vistas para ellos.

QuiltView Library - Se extiende desde GridLayout, así que básicamente tiene el mismo problema.

StaggeredGridView - Parece el más prometedor, pero tiene muchos errores, especialmente al cambiar de orientación. dichos errores incluyen celdas vacías, desplazamiento incorrecto y NPE (raros, pero aún así sucede). Tampoco estoy seguro de si es compatible con celdas personalizadas en lugar de solo imágenes vistas.

Otras soluciones, como se menciona.aquí .

La pregunta

¿Alguien sabe de otra alternativa a este problema? Tal vez algunas soluciones para alguna de las soluciones que he mostrado?

EDITAR: Creo que sobre StaggeredGridView, el desplazamiento y las excepciones se pueden resolver utilizando un ImageView normal que establezca su tamaño dentro de getView. Creo que la razón para que funcione de una manera extraña es que la muestra actualiza el tamaño de la vista de imagen después de que se cargó desde Internet.

Sin embargo, el problema de las celdas vacías aún permanece en esta biblioteca. No solo eso, sino que sus tamaños cambian mucho, incluso sin cambiar la orientación.

EDIT: por ahora, creo que la mejor solución es usar,PinterestLikeAdapterView library.

No tiene ningún problema que pueda encontrar.

sin embargo, no puede hacer que los elementos tomen más de 1 celda de ancho. Es muy bueno sin embargo.

EDIT: lamentablemente tiene problemas con notifyDataSetChanged. he informado al respectoaquí.

Respuestas a la pregunta(3)

Su respuesta a la pregunta