Подтвердить что ты не робот

Предотвращение растягивания фонового изображения

Всякий раз, когда я назначаю фон для представления, которое выложено с помощью wrap_content, если фоновое изображение больше, чем представление, представление растягивается так, что оно может удерживать весь фон. Почему это так и как предотвратить это? Это происходит даже в том случае, если изображение имеет 9-патч и отмечены растяжимые области - почему изображение не уменьшено до размера представления?

4b9b3361

Ответ 1

Вы можете использовать RelativeLayout и создать в нем два элемента. ImageView для фона и другое представление для вашего контента. Используйте android:layout_alignBottom для ImageView и установите значение для идентификатора вашего содержимого. Также установите для параметра scaleType ImageView значениеXY.

<RelativeLayout android:id="@+id/relativeLayout1" 
  android:layout_height="wrap_content" 
  android:layout_gravity="center" 
  android:layout_width="fill_parent">

<ImageView android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:scaleType="fitXY"
  android:src="@drawable/chronometer_bg"
  android:id="@+id/imageView_chronometerBackground"
  android:layout_alignBottom="@id/chronometer" />

<Chronometer android:text="Chronometer"
      android:id="@+id/chronometer" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:layout_centerHorizontal="true"
      android:textSize="32sp"
      android:gravity="center" />

</RelativeLayout>

Ответ 3

Вы можете попробовать установить ширину и высоту примерно как 60dp вместо wrap_content и использовать android:scaleType.

Ответ 4

Вместо использования фона вы можете использовать FrameLayout с ImageView в качестве первого элемента. Затем используйте android: scaleType = "center", чтобы изображение не масштабировалось. Он всегда будет оригинальным размером и центрирован. Затем вы можете поместить все виды, которые вам нравятся, поверх него в FrameLayout.

Ответ 5

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

  • взять исходное изображение
  • добавить вокруг него 2-х пиксельную рамку (1 пиксельная рамка для 9-патч-маркировки и 1 пиксельная пустая рамка)
  • отметьте пустую границу как растяжимую

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

Btw, это может быть не лучшее решение, но поскольку другие уже перечислили хорошие решения, я подумал, что я тоже добавил это: -)

Ответ 6

Почему так? Поскольку вы устанавливаете ширину на wrap_content.

Как вы можете предотвратить это:

а. Установите атрибут maxWidth.

б. Попробуйте поместить ImageView с помощью wrap_content внутри макета с фиксированной шириной.

с. (Я часто использую TableLayout, поскольку его атрибуты shrinkColumns и stretchColumns удобны для таких вещей. Возможно, это может сработать и для вас.)

Слишком много, требуется XML.