Установите фон с гравитацией без изменения размера контейнера View в Android

Как я могу добавить фон в представление, не изменяя его размер, показывая только ту часть изображения, которая соответствует предыдущему пространству?

Пример:

У меня такой исходный макет:

Установите фон с гравитацией без изменения размера контейнера View в Android

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto"
    xmlns:tools = "http://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    android:background = "#8900"
    android:orientation = "vertical"
    tools:context = "com.tappx.myapplication.MainActivity">


    <LinearLayout
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        android:background = "#fff"
        android:orientation = "vertical">

        <TextView
            android:layout_width = "wrap_content"
            android:layout_height = "100dp"
            android:layout_gravity = "center"
            android:background = "#0f0"
            android:gravity = "center"
            android:text = "HELLO" />

        <TextView
            android:layout_width = "wrap_content"
            android:layout_height = "100dp"
            android:layout_gravity = "center"
            android:background = "#f0f"
            android:gravity = "center"
            android:text = "HELLO" />


    </LinearLayout>


</LinearLayout>

И я хочу применить следующее изображение как градиент к белому фону:

Установите фон с гравитацией без изменения размера контейнера View в Android

Для этого (обратите внимание, что градиент заполняет горизонталь и имеет нижнюю гравитацию):

ЦЕЛЬ:Установите фон с гравитацией без изменения размера контейнера View в Android

Моя проблема в том, что установка градиента как android:background увеличивает размер представления контейнера до этого (теряя красную нижнюю часть)

Установите фон с гравитацией без изменения размера контейнера View в Android

Также попытался создать растровое изображение xml без результатов:

<?xml version = "1.0" encoding = "utf-8"?>
<layer-list xmlns:android = "http://schemas.android.com/apk/res/android">
    <item>
        <bitmap
            android:gravity = "bottom"
            android:src = "@drawable/gradient" />
    </item>
</layer-list>

Как я могу этого добиться?

Я предполагаю, что проблема связана с вашей высотой LinearLayout, установленной на "wrap_content". Вам действительно нужно использовать LinearLayouts? Может быть, ConstraintLayout с горизонтальной направляющей, например, будет лучшим решением? В таком случае вы сможете добавить свою картинку, приклеив ее нижнюю часть к любому конкретному виду.

muminers 13.03.2018 15:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
139
1

Ответы 1

Изображение, которое вы используете, очень длинное, а ваш контейнер настроен на обертывание содержимого, поэтому он расширяется для размещения изображения.

Поскольку вы уже используете фиксированную высоту внутренних элементов, вы можете просто установить фиксированную высоту для контейнера (200dp), и она будет работать.

Другие вопросы по теме