масштабирование / форматирование нескольких массивов изображений в Android - PullRequest
0 голосов
/ 17 сентября 2011

Итак, у меня есть задача создать горизонтальный массив кнопок с изображениями, которые в основном представляют собой аватары пользователей. Эти аватары не ограничены соотношением сторон или размером, и поэтому я разыскивал способы их масштабирования и форматирования. Я получил их масштабирование с помощью scaletype = "fitCenter" и с использованием статической ширины и высоты. Но я действительно хочу, чтобы они столкнулись друг с другом. В настоящее время, если изображение выше, чем высокое, вы получаете вид почтового ящика, но по бокам и сверху (пустые области). Я пробовал все различные значения масштабирования, оборачивая каждую карту изображения в линейный макет и т. Д., Но ничего, что я пытаюсь, кажется, не избавиться от них (при отображении всего изображения в масштабе). Есть ли способ сделать это?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2011

Просто чтобы повторить то, что я думаю, вы делаете, у вас есть три сценария изображения:

  1. Квадратное изображение
  2. Пейзажное изображение (шире, чем высокий)
  3. Портретное изображение (выше, чем широко)

Размещение строки 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, чтобы соответствовать фиксированной высоте, которую вы выбрали для всех из них.

НТН

0 голосов
/ 17 сентября 2011

Используйте scaleType fitXY, он растягивает изображение до назначенных вами параметров макета, если изображение имеет меньшие размеры, а также сжимает изображение до назначенных вами параметров макета, если изображение большое.Ключевым моментом является упоминание параметров макета изображения для imageView, то есть ширины и высоты изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...