Форма наложения Android Drawable

Я пытаюсь создать рисуемый элемент управления формой наложения, который в основном будет иметь сплошное БЕЛОЕ поле вверху, а затем оставшийся сегмент экрана будет иметь градиент от сплошного белого до полупрозрачного белого. Мы используем это, чтобы наложить фоновое изображение, чтобы создать сплошную белую область сверху, а затем постепенно переходя в фоновое изображение внизу.

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

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <shape xmlns:android="http://schemas.android.com/apk/res/android"
                android:shape="rectangle">
                <gradient
                    android:angle="270"
                    android:startColor="#ffffffff"
                    android:centerColor="#00ffffff"
                    android:endColor="#00ffffff"
                    android:centerY="0.6"
                    android:type="linear" />
            </shape>
        </item>
        <item>
            <shape xmlns:android="http://schemas.android.com/apk/res/android"
                android:shape="rectangle">
                <gradient
                    android:startColor="#ffffffff"
                    android:centerColor="#ffffffff"
                    android:endColor="#00ffffff"
                    android:centerY="-0.17"
                    android:gradientRadius="100%p"
                    android:type="radial" />
            </shape>
        </item>
    </layer-list>

Что производит отображение, подобное этому:

введите здесь описание изображения

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

Я пытался сделать что-то вроде следующего, но это не работает. Добавление первого элемента в список дает мне сплошную область вверху, но по какой-то причине, которую я, вероятно, просто не понимаю, заключается в том, что верхний элемент заполняет весь экран сплошным белым цветом. Я попытался переместить этот первый элемент вниз, но это все равно дало мне сплошной белый экран.

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item >
        <shape
            android:shape="rectangle">
            <size android:height="100dp" />
            <solid android:color="#ffffffff"/>
        </shape>
    </item>
    <item android:top="100dp" >
        <shape
            android:shape="rectangle">
            <gradient
                android:angle="270"
                android:startColor="#ffffffff"
                android:centerColor="#00ffffff"
                android:endColor="#00ffffff"
                android:type="linear" />
        </shape>
    </item>
    <item android:top="100dp" >
        <shape
            android:shape="rectangle">
            <gradient
                android:startColor="#ffffffff"
                android:centerColor="#ffffffff"
                android:endColor="#00ffffff"
                android:centerY="-0.17"
                android:gradientRadius="100%p"
                android:type="radial" />
        </shape>
    </item>
</layer-list>

Может ли кто-нибудь сказать мне, что я делаю неправильно, или дать мне лучший способ сделать это.

Просто для дополнительной информации. Фактическое изображение применяется к фону базового представления LinearLayout. Затем другой вид накладывается поверх базового вида с этим набором рисунков в качестве фона на его LinearLayout, поэтому он действует как маска наложения поверх фонового изображения.

Я ценю любую помощь, которую я могу получить по этому поводу.


person Mike    schedule 29.09.2016    source источник
comment
Можете ли вы добавить два дочерних элемента Linear Layouts к одному родительскому элементу Relative Layout. Верхний линейный макет имеет белый фон, а нижний градиент? Я не совсем уверен, что следую правильно.   -  person Apollo SOFTWARE    schedule 30.09.2016
comment
Спасибо, ApolloSoftware, изначально я не хотел этого делать, так как этот дисплей используется на нескольких разных экранах в моем приложении, поэтому я надеялся сделать это в одном месте, например, в Drawable. Но, приняв вашу идею, я смог найти, где я мог бы сделать это в представлении базового макета, поэтому в настоящее время я думаю, что у меня это работает так, как мне нужно. Если я не получу лучших ответов или информации, я постараюсь пометить ваш ответ как отвеченный.   -  person Mike    schedule 30.09.2016
comment
Круто, я добавлю это как ответ. Желаем удачи. Я понимаю, что вы говорите. Поскольку у вас разные портретные/пейзажные ориентации, более высокое разрешение и более высокое разрешение. макетов, сделать это правильно на всех устройствах очень сложно!, это выйдет из-под контроля для всех типов устройств. Вещь, которая отстойна в отношении Android и ios, AutoLayout в iOS многое делает для вас, это меньше настроек, но гораздо проще учитывать множество разных устройств с разными размерами! Один из компромиссов.   -  person Apollo SOFTWARE    schedule 30.09.2016
comment
Хммм я думал. Не могли бы вы поместить логотип вашей компании в виде одного PNG с белым фоном и использовать ImageView, определяющий его размер с помощью android:layout_width=fill_parent android:layout_height=fill_parent android:orientation=vertical. Я думаю, что вертикальная ориентация могла бы помочь. Имейте относительный макет в качестве родителя, затем установите цвет фона вашего дочернего элемента LinearLayout как белый. Затем в следующем дочернем элементе LinearLayout вы помещаете остальные виджеты и т. д. и добавляете свой градиент в качестве фона дочернего элемента. Не уверен, что это будет по-другому, но, возможно, стоит попробовать.   -  person Apollo SOFTWARE    schedule 30.09.2016


Ответы (1)


Вы можете добавить два дочерних элемента Linear Layouts к одному родительскому элементу Relative Layout. Пусть верхний линейный макет имеет белый фон, а нижний градиент.

person Apollo SOFTWARE    schedule 30.09.2016