Android Glide - BitmapTransformation () не может применяться к (android .content.Context) - PullRequest
0 голосов
/ 08 мая 2020

Я пытаюсь обрезать изображение внутри адаптера recyclerview:

Это код:

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

Это класс:

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;
    }
}

Первая ошибка stati c:

Modifier 'static' not allowed here

Когда я меняю его на абстрактный, я получаю

Cannot create an instance of an abstract class

on .transform(CutOffLogo(context))

Затем я получаю 'BitmapTransformation()' in

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

на context дюймах super(context)

Как это решить?

1 Ответ

0 голосов
/ 09 мая 2020

Stati c class

Вы получаете ошибку:

Modifier 'static' not allowed here

И это правда. Только вложенный класс может быть c - значит класс внутри другого класса.

Где его использовать?

Вложенный класс stati c может быть создан без создания экземпляра его внешнего класса.

Абстрактный класс

Java Абстрактный класс используется для предоставления общей реализации метода для всех подклассов или для реализации реализации по умолчанию. Но вы не можете создать экземпляр этого класса.

Fix - CutOffLogo class

1) Нет необходимости вызывать конструктор. Вы можете удалить этот вызов.

2) В последней версии Glide вам также понадобится метод updateDiskCacheKey().

Итак, ваш класс может выглядеть так же. В 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))
...