Я нашел эту замечательную ветку, описывающую, как «съесть торт и съесть его тоже», т.е. использовать изображение Button
вместо ImageButton
(что не позволяет SetText()
, изменение размера и т. Д.).
Это достигается с помощью атрибута View:
android:background="@drawable/bgimage"
Единственная проблема заключается в том, что изображение растягивается до размера кнопки.
Если не считать жесткого кодирования фиксированного размера кнопки (в пикселях!), Есть ли способ запретить Android вообще растягивать фоновое изображение и либо обрезать, либо дополнять его?
источник
ImageView
Выглядит интересно. Я заметил , что это имеет атрибут, которого нет вButton
:android:cropToPadding
. Я не против использовать вместо этого ImageView, если он естьsetOnClickListener()
- а он это делает. Что я потеряю, переключившись сButton
наImageView
?setDrawableResource
а затем убедиться, чтоsetAdjustViewBounds
установлено значение trueВы можете создать растровое изображение xml и использовать его в качестве фона для представления. Чтобы предотвратить растяжение, вы можете указать
android:gravity
атрибут.например:
Есть много параметров, которые вы можете использовать для настройки рендеринга изображения.
http://developer.android.com/guide/topics/resources/drawable-resource.html#Bitmap.
источник
Простое использование
ImageButton
вместоButton
решает проблему.и вы можете установить
чтобы удалить фон кнопки, если хотите.
Быстрая починка !! :-)
источник
Я использую ImageView в RelativeLayout, который накладывается на мой обычный макет. Код не требуется. Он устанавливает размер изображения на всю высоту экрана (или любой другой макет, который вы используете), а затем обрезает изображение слева и справа по ширине. В моем случае, если пользователь поворачивает экран, изображение может быть слишком маленьким. Поэтому я использую match_parent, что заставляет изображение растягиваться по ширине, если оно слишком маленькое.
источник
У меня была та же проблема: вы должны использовать только изображение с 9 патчами (.9.png) вместо исходного изображения.
Serge
источник
Используйте draw9patch ... включенный в инструменты SDK Android Studio. Вы можете определить растяжимые области вашего изображения. Важные части ограничены, и изображение не выглядит искаженным. Хорошая демонстрация на dra9patch ЗДЕСЬ
Используйте draw9patch, чтобы изменить существующий splash.png на new_splash.9.png, перетащите new_splash.9.png в папку проекта drawable-hdpi и убедитесь, что файлы AndroidManifest и styles.xml правильные, как показано ниже:
AndroidManifest.xml:
styles.xml:
источник
У меня было фоновое изображение, небольшое по размеру, но со странными размерами - отсюда растяжение и плохая производительность. Я создал метод с параметрами Context, View и идентификатором (int), который будет соответствовать размеру экрана устройства. Используйте это, например, в Fragments onCreateView, чтобы установить фон.
источник
Вот версия ответа Сантоша для программно созданных кнопок без необходимости отдельной конфигурации XML:
Я включил строку ColorFilter, поскольку она работает немного иначе, чем кнопки с обычным фоновым изображением.
источник
Вы можете использовать a
FrameLayout
с a вImageView
качестве первого дочернего элемента, а затем ваш обычный макет в качестве второго ребенка:источник
Ключ состоит в том, чтобы установить возможность рисования как изображение кнопки, а не как фон. Как это:
источник
Можно использовать обычный ImageView в своем xml и сделать его интерактивным (android: clickable = "true")? Вам нужно только использовать в качестве src изображение, имеющее форму кнопки, то есть закругленные углы.
источник