Glide v4 добавляет округлый передний план градиента к изображению - PullRequest
0 голосов
/ 12 января 2019

Можно ли добавить передний план с закругленными градиентами на растровое изображение, используя Glide v4?

Я пытался это сделать, но я перерисовываю углы из преобразования RoundedCorners ()

val requestOptions = RequestOptions().transforms(CenterCrop(), RoundedCorners(14.dp()))
Glide.with(context)
.asBitmap()
.load(item.image)
.apply(requestOptions)
.listener(object : RequestListener<Bitmap> {
    override fun onLoadFailed(@Nullable e: GlideException?, model: Any, target: Target<Bitmap>, isFirstResource: Boolean): Boolean {
        return false
    }

    override fun onResourceReady(resource: Bitmap, model: Any, target: Target<Bitmap>, dataSource: DataSource, isFirstResource: Boolean): Boolean {
        val canvas = Canvas(resource)
        val p = Paint()
        p.shader = LinearGradient(0f, 0f, 0f, resource.height.toFloat(), Color.parseColor("#4c000000"), Color.parseColor("#cc000000"), Shader.TileMode.MIRROR);
        canvas.drawPaint(p)
        return false
    }
})
.into(imageView)

Есть ли какое-нибудь Преобразование для градиента или кузнеца, как это?

Я знаю, что могу установить передний план xml в ImageView, но я пытаюсь избежать этого.

1 Ответ

0 голосов
/ 13 января 2019

Наконец-то я нашел решение.

Если изображение загружается первым (из Интернета я рисую скругленный градиент на исходном растровом изображении)

override fun onResourceReady(resource: Bitmap, model: Any, target: Target<Bitmap>, dataSource: DataSource, isFirstResource: Boolean): Boolean {
    if (dataSource == DataSource.REMOTE) {
        val canvas = Canvas(resource)
        canvas.drawBitmap(getBitmap(resource.width, resource.height), 0f,  0f, null)
    }
    return false
}

Округлый градиент от ресурсов

private fun getBitmap(width: Int, height: Int): Bitmap {
    val drawable = ContextCompat.getDrawable(view.context, R.drawable.image_rounded_foreground_gradient)
    val canvas = Canvas()
    val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
    canvas.setBitmap(bitmap)
    drawable.setBounds(0, 0, drawable.intrinsicWidth, drawable.intrinsicHeight)
    drawable.draw(canvas)

    return bitmap
}

А это image_ounded_foreground_gradient.xml

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:angle="90"
        android:endColor="#33000000"
        android:startColor="#99000000"
        android:type="linear" />

    <corners
        android:bottomLeftRadius="14dp"
        android:bottomRightRadius="14dp"
        android:topLeftRadius="14dp"
        android:topRightRadius="14dp" />

    <size
        android:width="276dp"
        android:height="340dp" />
</shape>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...