Просто чтобы повторить то, что я думаю, вы делаете, у вас есть три сценария изображения:
- Квадратное изображение
- Пейзажное изображение (шире, чем высокий)
- Портретное изображение (выше, чем широко)
Размещение строки ImageViews фиксированного размера (или ImageButtons) с помощью FIT_CENTER отлично работает для того, что вам нужно, если все изображения были квадратными или горизонтальными, потому что при масштабировании изображение всегда растягивается до горизонтальных границ вида. (самое большое измерение). Однако в портретных изображениях масштабирование приводит к тому, что вид находится внутри границ вида с фиксированным размером, так что можно видеть всю высоту изображения.
Если вам необходимо поддерживать соотношение сторон изображения, на самом деле нет ScaleType, чтобы помочь с этим, потому что логика была бы круглой (подгонять вид к изображению, одновременно подгоняя изображение к виду). Решение состоит в том, чтобы отрегулировать размер (в частности, ширину) каждого ImageView, чтобы соответствовать тому, к чему будет масштабироваться изображение. Вот пример фабричного метода, который вы можете использовать для генерации ImageView, чтобы соответствовать изображению, которое вы хотите поместить в него. Вы также можете немного изменить это, чтобы сбросить параметры в существующем ImageView, если вам нравится:
private ImageView getImageViewForThumbnail(Bitmap thumbnail) {
float viewHeight = //Your chosen fixed view height
float scale = ((float)thumbnail.getHeight()) / viewHeight;
float viewWidth = thumbnail.getHeight() / scale;
ImageView view = new ImageView(this);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int)viewWidth, (int)viewHeight);
view.setLayoutParams(params);
view.setScaleType(ScaleType.FIT_XY);
view.setImageBitmap(thumbnail);
return view;
}
Вы просто вычисляете, какой должна быть ширина экрана ImageView, чтобы соответствовать фиксированной высоте, которую вы выбрали для всех из них.
НТН