#android #android-layout #android-drawable #layer-list
#Android #android-макет #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, поэтому он действует как наложенная маска поверх фонового изображения.
Я ценю любую помощь, которую я могу получить по этому вопросу.
Комментарии:
1. Можете ли вы добавить два дочерних элемента линейных макетов к одному относительному родительскому макету. Должен ли верхний линейный макет иметь белый фон, а нижний — градиент? Я не совсем уверен, что правильно следую.
2. Спасибо ApolloSoftware, я изначально не хотел этого делать, поскольку этот дисплей используется на нескольких разных экранах в моем приложении, поэтому я надеялся сделать это в одном месте, например, в drawable. Но, взяв вашу идею, я смог найти, где я мог бы сделать это в базовом представлении макета, поэтому в настоящее время я думаю, что у меня все работает так, как мне нужно. Если я не получу никаких лучших ответов или информации, я постараюсь отметить ваш ответ как ответ.
3. Круто, я добавлю это в качестве ответа. Желаю удачи с этим. Я понимаю, о чем вы говорите. Поскольку у вас разные ориентации portriat / landscape, более высокие dpi и более высокое разрешение. макеты, получение их на всех устройствах — это боль!, это выйдет из-под контроля для всех типов устройств. Что отстойно в Android по сравнению с ios, автозапуск в iOS многое делает для вас, меньше настроек, но гораздо проще учитывать множество разных устройств с разными размерами! Один из компромиссов.
4. Хммм, я тут подумал. Не могли бы вы поместить логотип вашей компании в виде одного файла PNG с белым фоном и использовать вид изображения, определяющий его с помощью android:layout_width=»fill_parent» android:layout_height =»fill_parent» android: ориентация = «по вертикали». Я думаю, что вертикальная ориентация может помочь. Используйте относительный макет в качестве родительского, затем установите цвет фона вашего дочернего элемента LinearLayout как белый. Затем в следующем дочернем элементе LinearLayout вы размещаете остальные свои виджеты и т. Д. И добавляете свой градиент в качестве фона дочернего элемента. Не уверен, что это будет по-другому, но, возможно, стоит попробовать.
Ответ №1:
Вы можете добавить два дочерних линейных макета к одному относительному родительскому макету. Пусть верхний линейный макет будет иметь белый фон, а нижний — градиент.