Android Glide - BitmapTransformation() 无法应用于 (android.content.Context)

Android Glide - BitmapTransformation() cannot be applied to (android.content.Context)

我尝试在 recyclerview 适配器中裁剪图像:

这是代码:

Glide
    .with(context)
    .load(imgUrl)
    .transform(CutOffLogo(context))
    .into(holder.image)

这个class:

public static class CutOffLogo extends BitmapTransformation {

    public CutOffLogo(Context context) {
        super(context); // HERE
    }

    @Override
    protected Bitmap transform(BitmapPool pool, Bitmap toTransform,
                               int outWidth, int outHeight) {

        Bitmap myTransformedBitmap = Bitmap.createBitmap(
                toTransform,
                10,
                10,
                toTransform.getWidth(),
                toTransform.getHeight() - 20);

        return myTransformedBitmap;
    }
}

第一个错误是静态的:

Modifier 'static' not allowed here

当我将其更改为抽象时,我得到

Cannot create an instance of an abstract class

.transform(CutOffLogo(context))

然后我在

中得到 'BitmapTransformation()'
'com.bumptech.glide.load.resource.bitmap.BitmapTransformation' cannot be applied to '(android.content.Context)'

contextsuper(context)

如何解决?

静态class

您收到错误消息:

Modifier 'static' not allowed here

这是真的。只有嵌套的 class 可以是静态的 - 所以 class 在另一个 class 中。

我们可以在哪里使用它?

可以在不实例化其外部 class 的情况下实例化静态嵌套 class。

摘要class

Java抽象class用于为所有子class提供通用方法实现或提供默认实现。但是你不能创建这个 class.

的实例

修复 - CutOffLogo class

1) 不需要调用构造函数。您可以删除此调用。

2) 在最新版本的 Glide 中,您还需要 updateDiskCacheKey() 方法。

所以你的 class 可以看起来像那里。在 Kotlin 中:

class CutOffLogo : BitmapTransformation() {
    override fun transform(
        pool: BitmapPool,
        toTransform: Bitmap,
        outWidth: Int,
        outHeight: Int
    ): Bitmap =
        Bitmap.createBitmap(
            toTransform,
            10,
            10,
            toTransform.width,
            toTransform.height - 20
        )

    override fun updateDiskCacheKey(messageDigest: MessageDigest) {}
}

或在Java中:

public class CutOffLogo extends BitmapTransformation {

    @Override
    protected Bitmap transform(
            @NotNull BitmapPool pool,
            @NotNull Bitmap toTransform,
            int outWidth,
            int outHeight
    ) {

        return Bitmap.createBitmap(
                toTransform,
                10,
                10,
                toTransform.getWidth(),
                toTransform.getHeight() - 20);
    }

    @Override
    public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) {

    }
}

修复 - 调用 Glide

当您使用Java时,您必须使用:

.transform(new CutOffLogo(context))

但在 Kotlin 中:

.transform(CutOffLogo(context))