BitmapTransformation в библиотеке Glide не работает должным образом

Я новичок в библиотеке Glide, следуя приведенному здесь руководству по преобразованиям: https://github.com/bumptech/glide/wiki/Transformations

Я пытаюсь создать настраиваемое преобразование, но когда я помещаю breakline в метод преобразования класса Transformation, я вижу, что он никогда не вызывается.

Ниже мой код:

 private static class CustomTransformation extends BitmapTransformation { private Context aContext; public CustomTransformation(Context context) { super(context); aContext = context; } @Override protected Bitmap transform(BitmapPool pool, Bitmap toTransform, int outWidth, int outHeight) { return bitmapChanger(toTransform, 1080, (int) aContext.getResources().getDimension(R.dimen.big_image)); } @Override public String getId() { return "some_id"; } } private static Bitmap bitmapChanger(Bitmap bitmap, int desiredWidth, int desiredHeight) { float originalWidth = bitmap.getWidth(); float originalHeight = bitmap.getHeight(); float scaleX = desiredWidth / originalWidth; float scaleY = desiredHeight / originalHeight; //Use the larger of the two scales to maintain aspect ratio float scale = Math.max(scaleX, scaleY); Matrix matrix = new Matrix(); matrix.postScale(scale, scale); //If the scaleY is greater, we need to center the image if(scaleX < scaleY) { float tx = (scale * originalWidth - desiredWidth) / 2f; matrix.postTranslate(-tx, 0f); } return Bitmap.createBitmap(bitmap, 0, 0, (int) originalWidth, (int) originalHeight, matrix, true); } 

Я пробовал запустить Glide двумя способами:

 Glide.with(this).load(url).asBitmap().transform(new CustomTransformation(this)).into(imageView); 

а также

 Glide.with(this).load(url).bitmapTransform(new CustomTransformation(this)).into(imageView); 

Но никто не работает. Есть идеи? Опять же, я не ищу совета по самой Матрице, я просто не понимаю, почему transform(...) вообще не называется. Благодаря!

Скорее всего, вы испытываете проблемы с кешированием. В первый раз, когда вы скомпилировали и выполнили свой код, результат преобразования был кэширован, поэтому в следующий раз его не нужно применять к тому же исходному изображению.

Каждое преобразование имеет метод getId (), который используется для определения того, изменился ли результат преобразования. Обычно преобразования не меняются, но применяются или нет. Вы можете изменить его на каждую сборку во время разработки, но это может быть tedius.

Чтобы обойти эту проблему, вы можете добавить следующие два вызова в вашу линию нагрузки Glide:

 // TODO remove after transformation is done .diskCacheStrategy(SOURCE) // override default RESULT cache and apply transform always .skipMemoryCache(true) // do not reuse the transformed result while running 

Первый можно изменить на NONE, но тогда вам придется ждать, пока URL-адрес загрузится из Интернета каждый раз, вместо того, чтобы просто читать изображение с телефона. Второй полезен, если вы можете перейти к соответствующему преобразованию и отказаться от него, и хотите его отлаживать, например. Это помогает не требовать перезагрузки после каждой загрузки, чтобы очистить кеш памяти.

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

Заметка

Похоже, что перед загрузкой вы пытаетесь изменить размер изображения до определенного размера, вы можете использовать .override(width, height) в комбинации с .centerCrop() / .fitCenter() / .dontTransform() для этого.