144 votes

Android : Mettre à l'échelle un Drawable ou une image de fond ?

Sur une mise en page, je souhaite mettre à l'échelle l'image d'arrière-plan (en conservant son rapport d'aspect) pour qu'elle corresponde à l'espace alloué lors de la création de la page. Quelqu'un a-t-il une idée de la manière de procéder ?

J'utilise layout.setBackgroundDrawable() et un BitmapDrawable() pour fixer gravity pour le découpage et le remplissage, mais je ne vois aucune option pour la mise à l'échelle.

0voto

danitinez Points 1

Kotlin :

Si vous aviez besoin de dessiner un bitmap dans une vue, à l'échelle du FIT.

Vous pouvez effectuer les calculs appropriés pour que la hauteur de bm soit égale à celle du conteneur et ajuster la largeur, dans le cas où le rapport largeur/hauteur de bm est inférieur au rapport largeur/hauteur du conteneur, ou l'inverse dans le scénario opposé.

Images :

Example Image 1

Example Image 2

// binding.fragPhotoEditDrawCont is the RelativeLayout where is your view
// bm is the Bitmap
val ch = binding.fragPhotoEditDrawCont.height
val cw = binding.fragPhotoEditDrawCont.width
val bh = bm.height
val bw = bm.width
val rc = cw.toFloat() / ch.toFloat()
val rb = bw.toFloat() / bh.toFloat()

if (rb < rc) {
    // Bitmap Width to Height ratio is less than Container ratio
    // Means, bitmap should pin top and bottom, and have some space on sides.
    //              _____          ___
    // container = |_____|   bm = |___| 
    val bmHeight = ch - 4 //4 for container border
    val bmWidth = rb * bmHeight //new width is bm_ratio * bm_height
    binding.fragPhotoEditDraw.layoutParams = RelativeLayout.LayoutParams(bmWidth.toInt(), bmHeight)
}
else {
    val bmWidth = cw - 4 //4 for container border
    val bmHeight = 1f/rb * cw
    binding.fragPhotoEditDraw.layoutParams = RelativeLayout.LayoutParams(bmWidth, bmHeight.toInt())
}

-5voto

reflog Points 4994

Vous devrez mettre à l'échelle ce dessinable avant de l'utiliser comme arrière-plan.

-5voto

Eli Baynesay Points 1

Vous pouvez utiliser l'une des options suivantes :

Android:gravity="fill_horizontal|clip_vertical"

Ou

Android:gravity="fill_vertical|clip_horizontal"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X