Přeskočit na obsah
Android

Jetpack Compose Basics – Jak načítat obrázky z Bitmapy, Vectoru, Painteru nebo URL pomocí funkce Coil

Peter Šuly28. 2. 2023
Jetpack Compose Basics – Jak načítat obrázky z Bitmapy, Vectoru, Painteru nebo URL pomocí funkce Coil

Obrázky a ikony jsou zásadní součástí uživatelského rozhraní vaší aplikace. Používají se hlavně k vizuálnímu vyjádření akcí. Pomáhají vytvářet celkový dojem z vaší aplikace a dělají ji jedinečnou. Jak s nimi pracovat v Jetpack Compose? Pojďme se na to podívat!

Jetpack Compose jsou ve výchozím nastavení k dispozici 3 typy image composables. První bere jako parametr bitmapu, druhý vektor a poslední painter. Tyto funkce mají mnoho společných parametrů.

@Composable fun Image( //bitmap or vector or painter contentDescription: String?, modifier: Modifier = Modifier, alignment: Alignment = Alignment.Center, contentScale: ContentScale = ContentScale.Fit, alpha: Float = DefaultAlpha, colorFilter: ColorFilter? = null )
  • contentDescription – text používaný v accesibility k popisu obsahu obrázku
  • modifier – slouží k provádění změn z caller side
  • alignment – slouží k umístění obrázku v daných mezích
  • contentScale – slouží k určení poměru stran. Možné hodnoty jsou None, FillBounds, Inside, Fit, FillWidth, FillHeight nebo Crop.
  • alpha – volitelná neprůhlednost
  • colorFilter – při vykreslení se na obrázek použije zadaný filtr

Načtení obrázku z Bitmapy

Tento úryvek kódu se načte a zobrazí danou bitmapu.

val bitmap = getBitmapFromYourSource() Image( bitmap = bitmap, contentDescription = "Cat" )

Načítání obrázku z Vectoru

Tento úryvek kódu se načte a zobrazí daný vektor, např. ikonu.

Načtení obrázku z Painteru

To je nejzajímavější část. Bitmapa i vektor používají tento typ composables na pozadí. Existuje mnoho předdefinovaných painterů, např. ColorPainter, který kreslí definovanou barvou v mezích.

Image( painter = ColorPainter(Color.Yellow), contentDescription = "Yellow rectangle" )

Načítání obrázku z URL

Pravděpodobně nemáte všechny obrázky použité v aplikaci uloženy lokálně. Pokud vaše aplikace pracuje s API, které vám odesílá adresu URL obrázku, budete ji muset načíst z internetu. Tady byste měli použít kteroukoli z dostupných knihoven.

Krátce před vydáním první stabilní verze Jetpack Compose oznámili vývojáři programu Coil image loader, že jejich knihovna plně spolupracuje s Compose. Než se objevila tato možnost, nejlepším řešením bylo použití knihovny Accompanist.

Coil má spoustu skvělých funkcí a na pozadí implementuje i rozhraní API pro paintery.

Jak použít Coil k načtení obrázku ze serveru?

Co když chceme tento typ „rozložení“ v aplikacích, kde získáváme obrázky jako URL? Je to vážně jednoduché, stačí si zapamatovat painter a hodit ho jako parametr do Image composable.

Happy kitty with photo
Row( modifier = Modifier.padding(16.dp), horizontalArrangement = Arrangement.spacedBy(16.dp) ) { //Important image loading part //Remembering of painter val painter = rememberImagePainter(data = cat.photoUrl) Image( modifier = Modifier .size(100.dp) .clip(RoundedCornerShape(16.dp)), //Use painter in Image composable painter = painter, contentDescription = "Cat" ) //Rest of compose code }

Již dříve jsme zmínili, že Coil má spoustu skvělých funkcí, např. škálování, transformace, ukládání do cache, bitmap polling..., v podstatě všechno, co budete potřebovat. Jejich použití je snadné, stačí zavolat požadovanou funkci do Builderu. Ty používáme většinu času.

val painter = rememberImagePainter( data = url, builder = { crossfade(true) //Crossfade animation between images placeholder(R.drawable.ic_image_loading) //Used while loading fallback(R.drawable.ic_empty) //Used if data is null error(R.drawable.ic_empty) //Used when loading returns with error } )

Voilà, obrázky se teď načítají téměř bez námahy.

Další články ze série Jetpack Compose Basics:

Zpět na články
Sdílet dál
Ozvěte se kdykoli

Připraveni rozjet projekt?
Pojďme stavět spolu.

Domluvte si hovor nebo nám napište e-mail.

Kontaktujte nás

Nevíte, kde začít? Stáhněte si naši šablonu produktového zadání.