Intereting Posts
Просмотр фрагмента ViewPager's, потерянный при отображении родительского фрагмента ViewPager, затем отображается Gradle не удалось синхронизировать с «неспособным найти дополнительную библиотеку», Удалять полосу прокрутки из программы ScrollView программно в Android Проблемы со Studio Studio Android: как я могу проверить, поддерживает ли устройство мультитач? Плагин ADT не может установить: Отсутствует требование: инструменты для разработки Android SelectableItemBackground как элемент в списке слоев Android – тень на текст? При использовании режима Immersive с диалогими, nav. Bar снова появляется и меняет размеры моего макета Динамическое добавление Views в RecyclerView только к текущему элементу Java.lang.IllegalArgumentException: Недопустимый символ в схеме с индексом 0: Проверить командную строку инструментов разработчика Android Android TV: несфокусированное изображение содержит черный прозрачный фон? Выделение объекта Java для объекта в Scala Как отображать экран входа только один раз?

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

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

Solutions Collecting From Web of "Предотвращение растягивания фонового изображения"

Вы можете использовать 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> 

Либо переопределите методы getS SuggestMinimumWidth и getS SuggestMinimumHeight вашего вида макета, либо методы getMinimumWidth и getMinimumHeight вашего фона, которые можно использовать для достижения этого.

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

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

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

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

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

Кстати, это может быть не лучшее решение, но поскольку другие уже перечислили хорошие решения, я подумал, что я тоже добавляю это 😉

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

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

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

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

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

Слишком много помогает, необходим XML.