- Как растягивать фон в layout только по горизонтали
- Как реализовать Android: фон, который не растягивается?
- 11 ответов
- UI-дизайн
- Как заполнить фон повторяющимся изображением (черепицей)
- 3D-панель
- Закругляемся
- Фоновое изображение в Layout
- Разметка интерфейса
- Изменение положения устройства
- Метод onConfigurationChanged
- Манифест AndroidManifest.xml
- Активность приложения MainActivity
- Положение portrait
- Положение landscape
- Скачать изображения
- Как автоматически изменить размер изображения для разных размеров экрана Android Studio?
Как растягивать фон в layout только по горизонтали
Есть layout, у него установлена картинка в качестве фона. Проблема в том, что картинка теряет пропорции при растягивании. Надо, чтобы картинка растягивалась только по горизонтали, а не вместившееся по вертикали обрезалось.
Единственное, что пока приходит на ум, создать потомок layout в котором в методе onMeasure устанавливать фон из Drawable который предварительно обрезать через ClipDrawable. Какой вариант можете еще посоветовать?
Можно растягивать Layout пальцами?
Здрасьте всем. Можно ли сделать так, чтобы когда пользователь зажимает два пальца на экране и.
Плиточный фон в layout
Здравствуйте, возможно ли сделать так чтобы картинка в background layout’а не растягивалась, а.
Как выставить слой по центру не только по горизонтали но и по вертикали?
использую метод margin:auto в сочетании с relative — только он дает правильную реакцию при.
Фон jpg для layout
Привет. У меня RelativeLayout, на нем несколько вьюшек, пользователь может устанавливать любую.
Фон activity или layout
как заполнить background слоя или активити заполняемой текстурой ?
Источник
Как реализовать Android: фон, который не растягивается?
Я нашел этот отличный поток, описывающий, как «съесть торт и его тоже», т.е. использовать образ для Button вместо ImageButton (который не разрешает SetText() , изменение размера и т.д.).
Это достигается с помощью атрибута View:
Единственная проблема заключается в том, что он растягивает изображение, чтобы он соответствовал размеру кнопки.
За исключением жесткого кодирования фиксированного размера кнопки (в пикселях!), есть ли способ сказать Android не растянуть фоновое изображение вообще и либо обрезать, либо пропустить его?
11 ответов
Вы должны использовать ImageView, если вы не хотите, чтобы он растягивался. Фоновые изображения всегда будут растягиваться, чтобы соответствовать представлению. Вы должны установить его как Drawable, чтобы заставить аспект изображения к объекту.
В противном случае, если вы придерживаетесь идеи Button, вам нужно будет принудительно масштабировать кнопку, чтобы изображение не растягивалось.
Вы можете создать растровое изображение xml и использовать его в качестве фона для представления. Чтобы предотвратить растяжку, вы можете указать атрибут android:gravity .
Существует множество опций, которые вы можете использовать для настройки рендеринга изображения
Просто использование ImageButton вместо Button устраняет проблему.
и вы можете установить
чтобы удалить фон кнопки, если вы хотите.
Я использую ImageView в RelativeLayout, который накладывается на мой обычный макет. Не требуется код. Он изменяет изображение на всю высоту экрана (или любой другой макет, который вы используете), а затем обрезайте изображение влево и вправо, чтобы соответствовать ширине. В моем случае, если пользователь поворачивает экран, изображение может быть слишком маленьким. Поэтому я использую match_parent, который сделает изображение растянутым по ширине, если оно слишком мало.
У меня была та же проблема: вы должны использовать только 9-патч-изображение (.9.png) вместо исходного изображения.
Используйте draw9patch. включенный в инструменты Android Studio SDK. Вы можете определить растяжимые области вашего изображения. Важные детали ограничены, и изображение не выглядит искаженным. Хорошая демонстрация на dra9patch ЗДЕСЬ
Используйте draw9patch, чтобы изменить существующий splash.png на new_splash.9.png, перетащите new_splash.9.png в папку проекта drawable-hdpi убедитесь, что AndroidManifest и styles.xml являются правильными, как показано ниже:
AndroidManifest.xml:
styles.xml:
У меня было фоновое изображение, оно не было большого размера, но со странными размерами — поэтому растяжение и плохая производительность. Я сделал метод с параметрами Context, View и drawable ID (int), который будет соответствовать размеру экрана устройства. Используйте это, например, в Fragments onCreateView, чтобы установить фон.
Здесь версия ответа Santosh для программно созданных кнопок, без необходимости отдельной XML-конфигурации:
Я включил строку ColorFilter, так как это работает немного иначе, чем кнопки с обычным фоновым изображением.
Вы можете использовать FrameLayout с ImageView в качестве первого дочернего элемента, а затем ваш обычный макет как второй ребенок:
Можно использовать простой ImageView в своем xml и сделать его интерактивным (Андроид: кликабельны = «истина» )? Вы должны использовать только как src изображение, которое было сформировано как кнопка в круглых углах.
Ключ состоит в том, чтобы установить выталкиваемый как образ кнопки, а не как фон. Вот так:
Источник
UI-дизайн
Как заполнить фон повторяющимся изображением (черепицей)
У многих элементов есть атрибут android:background, задать значение которому можно различными способами, в том числе указанием XML-ресурса, в котором описан способ заполнения заднего фона. Нам понадобятся само изображение, которым будет заполняться фон и XML-описание с указанием, как использовать это изображение при заполнении фона.
Исходное изображение pyramid.png (@drawable/pyramid)
XML-описание (@drawable/pyramidbitmap (pyramidbitmap.xml))
Атрибут android:tileMode задает тип заполнения, в данном случае повторение исходного изображения по двум направлениям X- и Y- координат (repeat), указанного в атрибуте android:src. Кроме repeat возможны варианты clamp и mirror. Помните, что данный приём применим только к bitmap, к фигурам, созданным при помощи XML, применить данную операцию нельзя.
Далее задается в качестве заднего фона (атрибут android:background) этот XML-файл. Для демонстрации выбран LinearLayout.
В режиме Graphical Layout у меня редактор заругался, что не может отпарсить строку. Но это не мешает запустить программу и получить следующий результат.
Образцы для фона можно поискать на специальных сайтах, например, на сайте http://subtlepatterns.com. Например, симпатичный узор вязанного свитера или вот еще красивый узор.
Пример программной установки подобного фона для ActionBar в Android 3, в которой наблюдаются некоторые проблемы с отображением (в Android 4 починили):
3D-панель
На фоне созданной черепицы можно создать красивую объёмную панель с стильным текстом.
Создадим файл panel.xml в папке res/drawable.
В файлах colors.xml и dimens.xml разместим ресурсы цветов и размеров.
Для черепицы (см. первый пример) ресурс в файле backgroundpattern.xml. Образец плитки используйте по вкусу:
Собираем всё вместе в разметке активности.
Закругляемся
Создадим закруглённый ободок вокруг какого-нибудь компонента, например, для TexView. В файле res/drawable/rounded.xml пишем:
Осталось прописать в атрибуте android:background данный ресурс и получим красивую рамку:
Вы можете проявить фантазию. Например, изобразить что-то в виде красивого блока, часто используемого на веб-страницах.
Источник
Фоновое изображение в Layout
Android позволяет устанавливать фоновое (background) изображение в корневой элемент разметки интерфейса Layout. Реализовать это совсем просто; достаточно в описание разметки вставить соответствующий атрибут android:background=»@drawable/earth». Предполагается, что изображение earth хранится в директории проекта res/drawable. На следующем скриншоте представлено изображение земли earth.png, которое будет использовано в описанном ниже примере в качестве фонового изображения разметки интерфейса Layout.
В чем особенность данного фонового изображения? Прямоугольный размер картинки включает расположенное не по центру изображение земли, которое при смене ориентации (orientation) будет «сплющиваться». Все правильные фигуры изображения будут изменять геометрические размеры, поскольку android будет непропорционально растягивать или сжимать фоновое изображения. На следующем скриншоте представлено данное фоновое изображение при повороте устройства android в положение portrait.
В этой статье рассмотрим вопросы размещения и адаптации фонового изображения в разметке интерфейса в зависимости от ориентации устройства. Нам необходимо будет научиться перехватывать обработку события при изменении положения устройства, и устанавливать соответствующее его ориентации фоновое изображение разметки.
Рассмотрим пример использования фонового изображения в разметке интерфейса. Нам необходимо :
- определить фоновое изображение в разметке интерфейса;
- подключиться к событию изменения положения/ориентации устройства;
- определить фоновое изображение согласно положению/ориентации устройства.
Создайте новый модуль Module приложения и разместите два изображения (earth_portrait.png, earth_landscape.png) в директории проекта res/drawable. Правильнее было бы, конечно, создать несколько изображений под разные разрешения, о чем сказано в описании ImageView. Но, для решения текущей задачи обойдемся «малой кровью», т.е. двумя изображениями. Изображения можно скачать в конце статьи.
Разметка интерфейса
В файле описания интерфейса приложения res/layout/activity.xml определяем два атрибута : background и orientation. В атрибуте android:background определяем ресурсный файл одного из изображениий. Атрибут android:orientation добавляем в описание разметки LinearLayout, чтобы среда разработки Android Studio не «ругалась».
Изменение положения устройства
Для того, чтобы подключиться к событию изменения положения устройства необходимо переписать метод активности onConfigurationChanged и соответствующим образом определить атрибут configChanges в файле манифеста проекта, чтобы система вызывала этот метод.
Метод onConfigurationChanged
Метод активности onConfigurationChanged в качестве параметра получает значение конфигурации устройства, которое передается родительскому (super) методу. Новое положение устройства сохраняем в переменной orientation и после этого вызываем метод определения фонового изображения setBackgroundImage.
Для чего нам необходима переменная orientation? Давайте представим ситуацию, что в приложении несколько активностей. В одной из активностей положение устройства изменяется, и после этого открывается данная активность. Система вызовет представленный (переопределенный в листинге) метод onResume, в котором будет определяться соответствующее фоновое изображение вызовом метода setBackgroundImage.
Итак, в листинге были переопределены два метода активности : onConfigurationChanged и onResume. Но, чтобы система вызвала метод onConfigurationChanged, необходимо настроить манифест приложения.
Манифест AndroidManifest.xml
В файле манифеста проекта manifests/AndroidManifest.xml необходимо в описании активности определить атрибут configChanges. Как видно в следующем коде атрибут включает 3 значения (keyboardHidden, orientation, screenSize), разделенных символом «или» ‘|’. То есть система будет реагировать на 3 события.
Дополнительную информацию по настройкам манифеста приложений с несколькими активностями, а также для взаимодействия разных приложений между собой можно получить на странице описания намерений Intent.
Активность приложения MainActivity
В активности приложения только определяется первоначальное значение переменной orientation. В листинг не включены представленные выше методы.
После старта приложения можно изменять положение устройства с portrait на landscape и обратно. Переопределенные в активности методы будут корректно устанавливать соответствующие фоновые изображения.
Положение portrait
Положение landscape
Скачать изображения
Используемые в примере изображения можно скачать здесь (742 Kб).
Источник
Как автоматически изменить размер изображения для разных размеров экрана Android Studio?
Я начинаю разрабатывать приложения для устройств Android с помощью Android Studio. Пока я тестировал свое приложение на совместимость по размеру экрана, я заметил, что изображения не меняют размер изображения автоматически.
Расположение изображения выглядит совершенно по-разному на разных размерах экрана. Если экран достаточно мал, изображение иногда будет размещено за пределами области видимости.
Я просмотрел весь интернет, но меня немного смущает вопрос о том, как сделать приложение совместимым с большинством размеров экрана (не считая планшетов). Я пошел на сайт Android, и они сказали, чтобы использовать wrap_content. но если я использую это, я не смогу отрегулировать высоту и ширину изображения в соответствии с тем, как я этого хочу.
Кто-нибудь знает, как сделать автоматическое изменение размера изображения в соответствии с размером экрана?
Вот изображения того, что происходит:
Это макет приложения:
Вот как я хочу, чтобы это выглядело (пиксель 3):
Но вот так это выглядит на меньшем экране (Nexus 5):
В XCode есть функция, называемая auto-resize, которая автоматически изменяет размер контента для вас. Есть ли в андроид студии нечто подобное?
Источник