Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

134
Views
Force Coil Compose para cargar directamente al recordar la imagen

Tengo un buscapersonas (acompañante) con una imagen que se obtiene de la web con Coil en Compose.

El rememberPainter() parece que solo llama a la solicitud cuando la Image componible se muestra por primera vez.

Entonces, cuando deslizo la página en el buscapersonas, la Image se muestra solo en ese momento, por lo que tenemos que esperar un momento.

¿Alguna forma de forzar la precarga de rememberPainter (Bobina)?


Edición 1:

Aquí hay una versión simple de mi implementación (con muchas cosas eliminadas pero que no tuvieron impacto en el resultado):

 @Composable private fun Foo(imageList: List<ImageHolder>) { if (imageList.isEmpty()) return val painterList = imageList.map { rememberImagePainter( data = it.getDataForPainter(), builder = { crossfade(true) }) } ImageLayout(imageList, painterList) } @Composable fun ImageLayout(imageList: List<ImageHolder>, painterList: List<Painter>) { HorizontalPager( count = imageList.size, modifier = Modifier.fillMaxWidth(), ) { page -> Image( painter = painterList[page], "", modifier = Modifier .fillMaxWidth() .height(200.dp) .background( imageList[page].colorAverage ), contentScale = ContentScale.Crop ) } }

Intenté tener directamente el RememberImagePainter en la imagen también por si acaso. Pero el problema es claramente que Image() de la página 2, 3, 4 no se procesa, por lo que Image no llama al pintor. Traté de ver cómo funciona por dentro, pero no pude encontrar.


Edición 2: encontré una solución pero no está limpia

 for (painter in painterList) Image(painter = painter, contentDescription = "", modifier = Modifier.size(0.001.dp))

Obliga a la bobina a cargar la imagen y con un tamaño realmente pequeño como 0.001.dp (con 0 no carga). Además, el problema es que en el generador debe forzar un tamaño o solo cargará un píxel, por lo que fuerzo el tamaño completo de la imagen porque no sé qué tamaño habría estado disponible para la imagen.

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

En la documentación de Coil hay una sección sobre precarga. Dependiendo de su arquitectura, puede hacer esto en diferentes lugares, el más fácil es usar LaunchedEffect :

 val context = LocalContext.current val imageLoader = LocalImageLoader.current LaunchedEffect(Unit) { val request = ImageRequest.Builder(context) .data("https://www.example.com/image.jpg") // Optional, but setting a ViewSizeResolver will conserve memory by limiting the size the image should be preloaded into memory at. // For example you can set static size, or size resolved with Modifier.onSizeChanged // .size(coil.size.PixelSize(width = 100, height = 100)) // or resolve display size if your images are full screen // .size(DisplaySizeResolver(context)) .build() imageLoader.enqueue(request) }
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!