apply the rounded corners to images loaded by Picasso too
This commit is contained in:
parent
6d46619cca
commit
15e7c72104
2 changed files with 43 additions and 4 deletions
|
@ -476,7 +476,7 @@ fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boo
|
||||||
.apply(options)
|
.apply(options)
|
||||||
.listener(object : RequestListener<Bitmap> {
|
.listener(object : RequestListener<Bitmap> {
|
||||||
override fun onLoadFailed(e: GlideException?, model: Any?, targetBitmap: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
override fun onLoadFailed(e: GlideException?, model: Any?, targetBitmap: Target<Bitmap>?, isFirstResource: Boolean): Boolean {
|
||||||
tryLoadingWithPicasso(path, target, signature)
|
tryLoadingWithPicasso(path, target, cropThumbnails, roundCorners, signature)
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -495,17 +495,24 @@ fun Context.loadPng(path: String, target: MySquareImageView, cropThumbnails: Boo
|
||||||
}
|
}
|
||||||
|
|
||||||
// intended mostly for Android 11 issues, that fail loading PNG files bigger than 10 MB
|
// intended mostly for Android 11 issues, that fail loading PNG files bigger than 10 MB
|
||||||
fun tryLoadingWithPicasso(path: String, view: MySquareImageView, signature: ObjectKey) {
|
fun Context.tryLoadingWithPicasso(path: String, view: MySquareImageView, cropThumbnails: Boolean, roundCorners: Int, signature: ObjectKey) {
|
||||||
var pathToLoad = "file://$path"
|
var pathToLoad = "file://$path"
|
||||||
pathToLoad = pathToLoad.replace("%", "%25").replace("#", "%23")
|
pathToLoad = pathToLoad.replace("%", "%25").replace("#", "%23")
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Picasso.get()
|
var builder = Picasso.get()
|
||||||
.load(pathToLoad)
|
.load(pathToLoad)
|
||||||
.centerCrop()
|
.centerCrop()
|
||||||
.fit()
|
.fit()
|
||||||
.stableKey(signature.toString())
|
.stableKey(signature.toString())
|
||||||
.into(view)
|
|
||||||
|
if (roundCorners != ROUNDED_CORNERS_NONE) {
|
||||||
|
val cornerSize = if (roundCorners == ROUNDED_CORNERS_SMALL) R.dimen.rounded_corner_radius_small else R.dimen.rounded_corner_radius_big
|
||||||
|
val cornerRadius = resources.getDimension(cornerSize).toInt()
|
||||||
|
builder = builder.transform(RoundedCornersTransformation(cornerRadius.toFloat()))
|
||||||
|
}
|
||||||
|
|
||||||
|
builder.into(view)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package com.simplemobiletools.gallery.pro.helpers
|
||||||
|
|
||||||
|
import android.graphics.*
|
||||||
|
import com.squareup.picasso.Transformation
|
||||||
|
|
||||||
|
// taken from https://stackoverflow.com/a/35241525/1967672
|
||||||
|
class RoundedCornersTransformation(private val radius: Float) : Transformation {
|
||||||
|
|
||||||
|
override fun transform(source: Bitmap): Bitmap {
|
||||||
|
val size = Math.min(source.width, source.height)
|
||||||
|
val x = (source.width - size) / 2
|
||||||
|
val y = (source.height - size) / 2
|
||||||
|
val squaredBitmap = Bitmap.createBitmap(source, x, y, size, size)
|
||||||
|
if (squaredBitmap != source) {
|
||||||
|
source.recycle()
|
||||||
|
}
|
||||||
|
|
||||||
|
val bitmap = Bitmap.createBitmap(size, size, source.config)
|
||||||
|
val canvas = Canvas(bitmap)
|
||||||
|
val paint = Paint()
|
||||||
|
val shader = BitmapShader(squaredBitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP)
|
||||||
|
paint.shader = shader
|
||||||
|
paint.isAntiAlias = true
|
||||||
|
|
||||||
|
val rect = RectF(0f, 0f, source.width.toFloat(), source.height.toFloat())
|
||||||
|
canvas.drawRoundRect(rect, radius, radius, paint)
|
||||||
|
squaredBitmap.recycle()
|
||||||
|
return bitmap
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun key() = "rounded_corners"
|
||||||
|
}
|
Loading…
Reference in a new issue