web-dev-qa-db-fra.com

Comment charger une image à partir d'un dessin dans Jetpack compose?

J'ai essayé le code ci-dessous mais il ne reflète rien dans l'interface utilisateur, il me manque quelque chose ici?

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            loadUi()
        }
    }

    @Composable
    fun loadUi() {
        CraneWrapper {
            MaterialTheme {
                Image(
                    (ResourcesCompat.getDrawable(
                        resources,
                        R.mipmap.ic_launcher,
                        null
                    ) as BitmapDrawable).bitmap
                )
            }
        }
    }
}
5
Maddy
@Composable
fun loadUi() {
val image = +imageResource(R.drawable.header)
    CraneWrapper {
        MaterialTheme {
            Container(expanded = true,height = 180.dp) {
                //Use the Clip() function to round the corners of the image
                Clip(shape = RoundedCornerShape(8.dp)) {
                //call DrawImage() to add the graphic to the app
                    DrawImage(image)
                }
            }
        }
    }
}
1
Jeffy Lazar

Utilisez simplement:

val icon = imageFromResource(resources, R.drawable.ic_xxx)
0
Gabriele Mariotti

J'ai trouvé qu'il y avait une fonction imageFromResource () dans AndroidImage.kt:

fun imageFromResource(res: Resources, resId: Int): Image {
    return AndroidImage(BitmapFactory.decodeResource(res, resId))
}

donc votre code serait:

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContent {
        loadUi()
    }
}

@Composable
fun loadUi() {
    CraneWrapper {
        MaterialTheme {
            val image = imageFromResource(resources, R.mipmap.ic_launcher)
            SimpleImage(image)
        }
    }
}

}

0
Mihaela Romanca

J'ai trouvé SimpleImage classe de la bibliothèque jetpack compose pour charger l'image mais c'est une solution temporaire, et je n'ai pas encore trouvé d'option de style avec cela.

// TODO(Andrey) Temporary. Should be replaced with our proper Image component when it available
@Composable
fun SimpleImage(
    image: Image
) {
    // TODO b132071873: WithDensity should be able to use the DSL syntax
    WithDensity(block = {
        Container(width = image.width.toDp(), height = image.height.toDp()) {
            Draw { canvas, _ ->
                canvas.drawImage(image, Offset.zero, Paint())
            }
        }
    })
}

Je l'ai utilisé de cette façon

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            loadUi()
        }
    }

    @Composable
    fun loadUi() {
        CraneWrapper {
            MaterialTheme {
                val bitmap = (ResourcesCompat.getDrawable(
                        resources,
                        R.mipmap.ic_launcher,
                        null
                    ) as BitmapDrawable).bitmap
                SimpleImage(Image(bitmap))
            }
        }
    }
}

Pourtant, je ne suis pas sûr que ce soit la bonne façon de charger l'image à partir de dessins.

0
Maddy

Google a mis à jour son API. Pour 0.1.0-dev03 Le chargement des images est synchrone et se fait de cette façon

val icon = +imageResource(R.drawable.ic_xxx)

Pour dessiner l'image

Container(modifier = Height(100.dp) wraps Expanded) {
   DrawImage(icon)
}

Actuellement, le code ci-dessus repose sur vous en spécifiant la hauteur ou la largeur exacte. Il semble que la mise à l'échelle de l'image ne soit pas prise en charge si vous voulez par exemple une hauteur de 100 dp et wrap_content Au lieu de Expanded qui étend la largeur totale. Quelqu'un sait-il comment résoudre ce problème? Est-il également possible d'adapter l'image à l'intérieur de son conteneur comme à l'ancienne scaleType=fitCenter?

0
mohamed aouled issa