Sugerencia rápida: cargar imágenes de cualquier relación de aspecto de la manera correcta (Android|iOS) | Por Asheesh Sharma | Abril de 2022
Descargo de responsabilidad: este artículo solo contiene código de Android, también puede implementar el mismo código en iOS.
a veces obtenemos un Exigir Tenemos que renderizar una imagen o varios elementos con imágenes (para ser reciclados) en la vista del reciclador, pero no sabemos qué Relación de aspecto de la imagen original Si. Solo conocemos una de las dimensiones que podemos arreglar, y eso es todo lo que sabemos.Esto es específico para androide Pero puedes usar este proceso iOS además.
Solo para empezar, así es como lo hace Google definir la relación de aspecto
La relación de aspecto es La relación entre el ancho y el alto de la imagen.Esencialmente, describe la forma de la imagen. La relación de aspecto se escribe como una fórmula para ancho y alto de la siguiente manera: 3:2.
genial, ahora sabemos ¿Qué es la relación de aspecto?(sí) déjame compartir rápidamente lo que somos tratando de resolverlo aqui
Supongamos que tenemos un imagen debe mostrarse en la aplicación, nosotros No lo sé qué el tamaño de la imagen original Sí, pero queremos mostrar un Versión más pequeña Eso puede La altura es de 18 dp o el ancho puede ser de 100 dptambién tenemos una sola dimensión alto o ancho, no podemos usar ambos.
Hay Hay dos problemas aquí
- nosotros no se que ancho(o altura) deberíanpor supuesto, podríamos simplemente obtener la relación de aspecto y calcular el ancho esperado en función de la nueva altura, pero eso nos lleva al segundo problema.
- nosotros No sé la relación de aspecto.
pensamiento inicial– sí algunos chistes? No sabemos o ni siquiera sabemos ancho (o alto) ni siquiera relación de aspecto¿como podemos hacerlo?
cómo Espero reiniciar y renderizar correctamente En el caso de Reciclar? (se reciclan vistas de diferentes tamaños)
Entiendo que esto debería nunca suceda Pero a veces lo hace, créeme Las siguientes soluciones (proporcionadas en SO y en otros lugares) no funcionarán siempre 🙂
he estado usando el segundo metodo Ha sido me da el resultado correcto Para una sola imagen o imágenes en una vista de reciclador con la misma relación de aspecto, pero a veces se rompe cuando todas las imágenes pueden tener diferentes relaciones de aspecto.
yo era un poco enojado incluso después de hacer todos los hacks posibles
- Restablecer parámetros de diseño
- jugar con los márgenes
Nada funcionó y estaba totalmente decepcionado.
tener fuera Esto siempre está en mi mente, pero nunca traté de implementarlo porque siempre sentirse perezoso incluso pensó Impleméntalo.
✓ Descargar imagen desde URL (Usaré Glide para esto)
✓ Encuentra el ancho y alto original de la imagen.
✓ Encuentra la relación de aspecto.
✓ Calcule la altura/anchura esperada en función de otras dimensiones conocidas.
✓ Si el ancho/alto calculado es mayor, vuelva a calcular restando 1/9 del nuevo tamaño hasta que encaje.
Eso es todo, configura el mapa de bits y verás una imagen perfectamente proporcionada.
por supuesto que nosotros No puedo vivir sin código
Así es como Lo implementé.
Nota: (el enlace Gist de Github está en la parte inferior)
próximo: Cómo mantener la misma altura de elementos de vista de recicladores horizontales con diferentes tamaños de imagen ? 😀