From d9b8bf382ac3ddbb4ee77ea722fb90b2484a0318 Mon Sep 17 00:00:00 2001 From: johan12345 Date: Sun, 11 Sep 2022 19:41:27 +0200 Subject: [PATCH] ChargerDetailScreen: make images square --- .../evmap/auto/ChargerDetailScreen.kt | 35 ++++++++++++------- 1 file changed, 23 insertions(+), 12 deletions(-) diff --git a/app/src/google/java/net/vonforst/evmap/auto/ChargerDetailScreen.kt b/app/src/google/java/net/vonforst/evmap/auto/ChargerDetailScreen.kt index 132fa8f8..88dfde68 100644 --- a/app/src/google/java/net/vonforst/evmap/auto/ChargerDetailScreen.kt +++ b/app/src/google/java/net/vonforst/evmap/auto/ChargerDetailScreen.kt @@ -3,6 +3,8 @@ package net.vonforst.evmap.auto import android.content.Intent import android.graphics.Bitmap import android.graphics.Canvas +import android.graphics.Matrix +import android.graphics.RectF import android.graphics.drawable.BitmapDrawable import android.net.Uri import android.text.SpannableStringBuilder @@ -44,6 +46,7 @@ import java.time.format.DateTimeFormatter import java.time.format.FormatStyle import kotlin.math.roundToInt + class ChargerDetailScreen(ctx: CarContext, val chargerSparse: ChargeLocation) : Screen(ctx) { var charger: ChargeLocation? = null var photo: Bitmap? = null @@ -363,13 +366,11 @@ class ChargerDetailScreen(ctx: CarContext, val chargerSparse: ChargeLocation) : val photo = charger.photos?.firstOrNull() photo?.let { val density = carContext.resources.displayMetrics.density - val url = if (largeImageSupported) { - photo.getUrl(size = (imageSizeLarge * density).roundToInt()) - } else { - photo.getUrl(size = (imageSize * density).roundToInt()) - } + val size = + (density * if (largeImageSupported) imageSizeLarge else imageSize).roundToInt() + val url = photo.getUrl(size = size) val request = ImageRequest.Builder(carContext).data(url).build() - var img = + val img = (carContext.imageLoader.execute(request).drawable as BitmapDrawable).bitmap // draw icon on top of image @@ -379,19 +380,29 @@ class ChargerDetailScreen(ctx: CarContext, val chargerSparse: ChargeLocation) : multi = charger.isMulti() ) - img = img.copy(Bitmap.Config.ARGB_8888, true) + val outImg = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888) val iconSmall = icon.scale( - (img.height * 0.4 / icon.height * icon.width).roundToInt(), - (img.height * 0.4).roundToInt() + (size * 0.4 / icon.height * icon.width).roundToInt(), + (size * 0.4).roundToInt() + ) + val canvas = Canvas(outImg) + + val m = Matrix() + m.setRectToRect( + RectF(0f, 0f, img.width.toFloat(), img.height.toFloat()), + RectF(0f, 0f, size.toFloat(), size.toFloat()), + Matrix.ScaleToFit.CENTER + ) + canvas.drawBitmap( + img.copy(Bitmap.Config.ARGB_8888, false), m, null ) - val canvas = Canvas(img) canvas.drawBitmap( iconSmall, 0f, - (img.height - iconSmall.height * 1.1).toFloat(), + (size - iconSmall.height * 1.1).toFloat(), null ) - this@ChargerDetailScreen.photo = img + this@ChargerDetailScreen.photo = outImg } this@ChargerDetailScreen.charger = charger