编程语言
首页 > 编程语言> > 使用 Glide 时找不到 BlurTransformation是什么原因?

使用 Glide 时找不到 BlurTransformation是什么原因?

作者:互联网

可能是因为这个类不是 Glide 的核心部分,而是需要额外的库支持。要使用模糊功能,您可以使用 Glide 的 BitmapTransformation 类来自行实现模糊效果,或者使用现成的库。

方法 1:自己实现 BlurTransformation

可以使用 BitmapTransformation 来创建自定义的模糊转换类。下面是一个实现模糊的示例:

1. 创建 BlurTransformation 类

创建一个新的 Kotlin 文件,命名为 BlurTransformation.kt,并实现如下:

import android.content.Context
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import androidx.annotation.NonNull
import com.bumptech.glide.load.Key
import com.bumptech.glide.load.Transformation
import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool
import com.bumptech.glide.load.resource.bitmap.BitmapTransformation
import java.security.MessageDigest

class BlurTransformation(private val context: Context, private val radius: Int) : BitmapTransformation() {

    override fun updateDiskCacheKey(@NonNull messageDigest: MessageDigest) {
        messageDigest.update((ID + radius).toByteArray(Key.CHARSET))
    }

    override fun transform(pool: BitmapPool, toTransform: Bitmap, outWidth: Int, outHeight: Int): Bitmap {
        return blurBitmap(context, toTransform, radius)
    }

    private fun blurBitmap(context: Context, bitmap: Bitmap, radius: Int): Bitmap {
        val outputBitmap = Bitmap.createBitmap(bitmap)
        val rs = android.renderscript.RenderScript.create(context)
        val input = android.renderscript.Allocation.createFromBitmap(rs, bitmap)
        val output = android.renderscript.Allocation.createFromBitmap(rs, outputBitmap)
        val script = android.renderscript.ScriptIntrinsicBlur.create(rs, android.renderscript.Element.U8_4(rs))

        script.setRadius(radius.toFloat())
        script.setInput(input)
        script.output(output)
        script.output(output)

        output.copyTo(outputBitmap)

        input.destroy()
        output.destroy()
        rs.destroy()
        return outputBitmap
    }

    companion object {
        private const val ID = "com.example.myapp.BlurTransformation"
    }
}

Kotlin

确保在使用时根据您的包名替换 com.example.myapp

2. 使用 BlurTransformation

使用您刚才创建的 BlurTransformation 类:

import com.bumptech.glide.Glide
import com.bumptech.glide.request.RequestOptions

val imageView: ImageView = findViewById(R.id.imageView) // 替换为你的 ImageView

Glide.with(this)
    .load(R.drawable.your_avatar) // 替换为你的头像资源或 URL
    .apply(RequestOptions().transform(BlurTransformation(this, 25))) // 模糊半径
    .into(imageView)

Kotlin

方法 2:使用依赖库

如果您希望使用简单的方式来实现模糊效果,可以使用第三方库,例如 Glide 结合 JPCT 或 AndroidX 的 RenderScript

一个推荐的库是 Glide 的扩展库,这样你可以直接使用现成的模糊转换功能:

1. 添加 Glide 依赖

确保你在 build.gradle 中添加了 Glide 依赖。

dependencies {
    implementation 'com.github.bumptech.glide:glide:4.12.0'
    kapt 'com.github.bumptech.glide:compiler:4.12.0'
    implementation 'jp.wasabeef.glide.transformations:glide-transformations:4.3.0' // 添加此行
}

Groovy

2. 使用 BlurTransformation

使用现成的库调用模糊功能:

import com.bumptech.glide.Glide
import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions
import jp.wasabeef.glide.transformations.BlurTransformation

Glide.with(this)
    .load(R.drawable.your_avatar) // 替换为你的头像资源或 URL
    .apply(RequestOptions.bitmapTransform(BlurTransformation(25, 3))) // 参数1是模糊半径,参数2是缩放因子
    .into(imageView)

标签:
来源: