Malevich

от автора

Так сложилось, что я люблю маленькие верткие библиотеки, которые с одной стороны — легко расширять, а с другой — удобны в использовании.

Но однажды я столкнулся с тем, что все библиотеки для загрузки изображений, которые я посмотрел либо работают с изображениями недостаточно эффективно, либо их трудно переделать под конкретную задачу. Я честно решил поконтрибьютить в одну из библиотек, которая на первый взгляд выглядела неплохо. Но, увы и ах, с прискорбием заметил что аналогичные попытки оптимизации данной библиотеки безуспешно предпринимаются с 2014 года.

Так как человек я по натуре ленивый — решил пойти проторенным путем — открыл пример от гугла Loading Large Bitmaps Efficiently и решил вырезав из него все ненужное — получить с одной стороны легко расширяемую, а с другой стороны максимально эффективную библиотеку.
Так как кто как не эти чуваки лучше знают как грузить битмапы?

Так и получился Малевич
image

Спойлер:

malevich.load(mImageUrl).into(mImageView); 

Вырезав, все ненужное и поправив глючки (их было чертовски мало) я начал добавлять нужное)

Наверное не сложно догадаться, какой библиотекой я вдохновлялся упрощая синтаксис.

Но давайте собственно к библиотеке.
Есть два режима использования.
Режим для гагар:

// init Malevich malevich = new Malevich.Builder(this).build();  // use malevich.load(mImageUrl).into(mImageView); 

И режим для тех, кому за 30:

Memory and disk caching params

ImageCache.ImageCacheParams cacheParams = new ImageCache.ImageCacheParams(this, "dir");         cacheParams.memoryCacheEnabled = true; //Enable memory cache         cacheParams.setMemCacheSizePercent(0.4f);  //Percent of available memory for cache         cacheParams.compressQuality = 90; // Compress quality         cacheParams.compressFormat = Bitmap.CompressFormat.PNG; // Compress format         cacheParams.diskCacheEnabled = true; // Use disk cache         cacheParams.diskCacheSize = 10485760; // Disk cache size 

Malevich Builder

malevich = new Malevich.Builder(this)         .debug(true) // write log         .maxSize(1024) // max size of image in px         .LoadingImage(R.drawable.some) // preloader image or recource         .CacheParams(casheParams) // custom cache         .build(); 

Loading image

Transform image after loading with prebuild utils or custom method

malevich.load(url).width(mItemHeight).height(mItemHeight).imageDecodedListener(new Malevich.ImageDecodedListener() {                     @Override                     public Bitmap onImageDecoded(String data, int reqWidth, int reqHeight, Bitmap bitmap) {                          // Get squared bitmap and transform it to circle                         return Malevich.Utils.getSquaredCircleBitmap(bitmap,reqWidth);                     }                 }).into(imageView); 

Но вобщем и целом, целью проекта не было сделать пикассо или глайд на гугловском движке. Я добавил только самые необходимые утилиты постоянно использующиеся в нелегкой жизни фрилансера — дай квадрат из картинки, дай круг и т.п. Так как хотелось сохранить легкую расширяемость и не превратиться в какую нибудь прости господи фреску от сами знаете кого.

Да, предмет моей особой гордости это то, что библиотека содержит меньше десятка классов и 0 (Зиро) зависимостей.

Ну и всякие формальности:
— настраиваемый, нежнейший лру кэш в памяти
— отключаемый дисковый кэш
— перекрытие событий загрузки, ошибок
— управление потоками
— няшные утилиты, удобный билдер
— единственная библиотека эффективно переиспользующая память согласно лучшим рекомендациям от Гугла)

Вобщем, если Вам когда нибудь придется грузить тонны картинок в хитро закрученном воркфлоу со всякими кастомными штуками — вспомните о Малевиче.

Ссылка на гитхаб: github.com/recoilme/malevich

Буду рад контрибьюторам!

ссылка на оригинал статьи http://habrahabr.ru/post/262189/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *