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)'
在 context
在 super(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))
我尝试在 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)'
在 context
在 super(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))