-
Notifications
You must be signed in to change notification settings - Fork 1
Home
Есть 2 проблемы:
- Картинки используют много памяти при отображении на планшете (и терпимо на телефоне)
- Некоторые картинки должны отображаться в круге
После проведенного анализа было выделено несколько решений:
- Для того, чтобы на планшете картинки использовали меньше памяти следует использовать
Bitmap.Config.RGB_565
- Загружать картинки разных размеров исходя из размеров отображаемой
ImageView
, т.е. использовать отложенную загрузку для ожидания вычисления размеровImageView
с изменением url исходя из этих размеров - Указывать размеры картинки через метод
targetSize(int w, int h)
вGlide
- Для отображения картинок в круге не использовать трансформаций из
Glide
или программное рисование наBitmap
, чтобы избежать лишнего потребления памяти, процессора, и "лесенки" при масштабировании картинки.
Библиотека заимствует работу загрузки изображений из Glide
, сохраняя её внутреннюю структуру.
Работа с библиотекой осуществляется через функции в классе ImageLoader
их пока 2: load
и cancel
.
Реализовано 3 загрузчика картинок: ImageLoader
, DeferredImageLoader
и GlideImageLoader
, первый - основной, является входным пунктом для запросов, второй для того, чтобы выполнить отложенный запрос, а третий это выбранная реализация (например Picasso
, Glide
или UIL
).
Отложенный загрузчик используется для того, чтобы выполнить запрос в тот момент когда будут известны размеры ImageView
.
Для загрузки изображения используются GlideImageLoader
и класс ImageRequest
.
ImageRequest
на основе параметров решает какую реализацию Drawable
использовать. Для отображения картинки в круге используется CircleFadingDaliDrawble
.CircleFadingDaliDrawble
наследник класса FadedDaliDrawable
, который отвечает за fade анимацию. Базовым классом является DaliDrawble
.
В библиотеке используется CircleFadingDaliDrawble
и FadedDaliDrawable
из-за fade анимации, её нельзя достичь используя только CircleImageView
, все потому что CircleImageView
отличается вызовом onDraw
от стандартного ImageView
, он банально там не использует тот drawable, который устанавливается в функции setImageDrawable
, а именно на этом построена анимация в Dali
и в других библиотеках, которые используют drawable для анимации. Поэтому задача была такая - взять DaliDrawable
и к ней добавить отображение в круге.
Для отложенной загрузки и изменения изображений можно использовать стандартные инструменты Glide
, например, CircleTransform(context)
и DeferredImageLoader
.