Как пропорционально масштабировать изображение в RecyclerView?
Загружаю изображение в ImageView с помощью библиотеки Picasso, проблема в том что все изображения имеют разную высоту (height).
Так-же есть данные о ширине (width) и высоте (height) изображения, но ширина изображения всегда ровна 640px.
Если стандартными методами нельзя решить то подскажите формулы как посчитать:
1)Пропорциональные размеры изображения при уменьшении
2)Пропорциональные размеры изображения при увеличение
Или ваш метод как делаете это вы. Все это ради того чтобы до загрузки изображения отобразить правильный размер ImageView и preloader соответственно
FrameLayout отнаследовать. Переопределять onMeasure. Выставлять пропорциональные размеры. Вставить ImageView, высота и ширина match_parent, scaleType fitXY.
Формула - обычная пропорция, в средней школе проходят.
Я уже решил задачу. Типичный пример зайдите в ленту вконтакте, ImageView занимает место столько сколько нужно именно этому изображению еще до загрузки самого изображения, т.е если просто выставить match_parent, wrap_content, получается изначально wrap_content = 0 и только когда изображение загрузится wrap_content >0, т.е получается не красиво, лента если так можно сказать пляшет
Решил так (может быть не правильно, но работает)
1)Опрелеляю ширину экрана конкретного устройства, она в конечном счете будет новой шириной картинки
2)Определяю коф. для пропорционального увеличения/уменьшения изображения k = new_w (ширина экрана) / w (ширина исходного изображнния)
3)Нахожу высоту изображения new_h = h (исходная высота) * k
4)Меняю высоту ImageView, ширина match_parent с помощью LayoutParams
то что вы сделали было бы актуально, если бы у вас не было возможности получить метрики картинок до момента лейаут-траверса. Так как метрики к моменту лейаута у вас уже есть, то как заметили в ответе выше, резоннее делать кастомную вьюху, т.к. ее проще реюзать. Переопределять межер можно кстати и в самой имагвью. А по-существу да, вы делаете корректный алго (правда некорректный алго для вашей задачи сделать сложно).