Intereting Posts
Как создать учетную запись Exchange в Android-эмуляторе с помощью 4.3 Использование одного и того же onTouchEvent в различных действиях Проблема интеграции с tess-two (Tesseract Tools for Android) в студию Android и создание ndk Как подключить клиент Android к локальному серверу Apache (php) внутри моего ноутбука? Запустить скрипт как root через ADB Установить значение по умолчанию для целочисленного столбца SQLite Как решить «Не удалось запустить mksdcard SDK tool» при установке Android Studio на Fedora 21? Как добавить KmlLayer в M4B Google Map для бизнеса? Невозможно использовать ServerSocket на Android В какой файловой системе используется Android? Джек компилирует навсегда Получить значение поля «Изменить текст» Выберите каталог / файл с помощью Intent.ACTION_CREATE_DOCUMENT (Storage Access Framework) Приложение не обновляется для альфа-тестеров в google play Тесты завершаются после обновления Espresso 2 (не удалось: сбой инструментария из-за «java.lang.IllegalAccessError»)

Рисование верхней границы формы на Android

Я создаю пользовательский индикатор выполнения (позиционируется под WebView ), и то, что я хотел бы сделать, – это линия шириной 1 WebView между WebView и ProgressBar . Я изменяю существующий drawable, а именно progress_horizontal.xml , и пробовал что-то вроде этого:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> (...) <item> <shape android:shape="line"> <stroke android:width="1dp" android:color="#FF000000" /> </shape> </item> </layer-list> 

Однако эта линия вертикально центрирована, но я хочу, чтобы она была нарисована поверх извлекаемой. Единственная идея, которую я мог придумать, – использовать этот «хакерский» градиент ниже:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> (...) <item> <shape> <gradient android:startColor="#FF000000" android:centerColor="#00000000" android:centerY="0.01" android:endColor="#00000000" android:angle="270" /> </shape> </item> </layer-list> 

Есть ли у вас лучшие идеи, как рисовать одну линию, выровненную до вершины выталкиваемой, определенной layer-list ?

Solutions Collecting From Web of "Рисование верхней границы формы на Android"

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

Первый элемент в вашем списке слоев должен быть сплошным цветом любого цвета, который вы хотите быть вашей границей. После этого будет (-ы), что вы хотите иметь границу, с заполнением на любой стороне, на которой вы хотите, чтобы граница была включена.

Например:

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item> <shape android:shape="rectangle"> <solid android:color="YOUR BORDER COLOR" /> </shape> </item> <item android:top="YOUR TOP BORDER THICKNESS"> THE THING YOU WANT A BORDER ON </item> </layer-list> 

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

Кажется, что это взломать, но это сработало для меня.

EDIT: Я сказал «padding», но в списках слоев это скорее смещение.

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

Моя проблема заключалась в том, чтобы определить кнопку с линейным градиентом и нарисовать верхнюю и нижнюю линию в разных цветах. В конце концов я взломал это решение. Я сохранил файл unter res / drawable / blue_btn.xml

  <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" > <shape android:shape="rectangle"> <solid android:color="@color/blue_end" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> <stroke android:width="1dp" android:color="@color/bottomline_btn" /> </shape> </item> <item> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle"> <solid android:color="@color/blue" /> <gradient android:startColor="@color/blue" android:endColor="@color/blue_end" android:angle="270" /> </shape> </item> <item android:top="0dp" android:bottom="-1dp" android:left="-1dp" android:right="-1dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="@color/topline_btn" /> <solid android:color="#00000000" /> <corners android:radius="0dp" /> </shape> </item> <item android:top="-1dp" android:bottom="0dp" android:left="-1dp" android:right="-1dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="@color/bottomline_btn" /> <solid android:color="#00000000" /> <corners android:radius="0dp" /> </shape> </item> </layer-list> </item> </selector> <color name="topline_btn">#31ffffff</color> <color name="bottomline_btn">#31000000</color> <color name="blue">#449def</color> <color name="blue_end">#2f6699</color> 1  <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" > <shape android:shape="rectangle"> <solid android:color="@color/blue_end" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> <stroke android:width="1dp" android:color="@color/bottomline_btn" /> </shape> </item> <item> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle"> <solid android:color="@color/blue" /> <gradient android:startColor="@color/blue" android:endColor="@color/blue_end" android:angle="270" /> </shape> </item> <item android:top="0dp" android:bottom="-1dp" android:left="-1dp" android:right="-1dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="@color/topline_btn" /> <solid android:color="#00000000" /> <corners android:radius="0dp" /> </shape> </item> <item android:top="-1dp" android:bottom="0dp" android:left="-1dp" android:right="-1dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="@color/bottomline_btn" /> <solid android:color="#00000000" /> <corners android:radius="0dp" /> </shape> </item> </layer-list> </item> </selector> <color name="topline_btn">#31ffffff</color> <color name="bottomline_btn">#31000000</color> <color name="blue">#449def</color> <color name="blue_end">#2f6699</color> 1  <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" > <shape android:shape="rectangle"> <solid android:color="@color/blue_end" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> <stroke android:width="1dp" android:color="@color/bottomline_btn" /> </shape> </item> <item> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle"> <solid android:color="@color/blue" /> <gradient android:startColor="@color/blue" android:endColor="@color/blue_end" android:angle="270" /> </shape> </item> <item android:top="0dp" android:bottom="-1dp" android:left="-1dp" android:right="-1dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="@color/topline_btn" /> <solid android:color="#00000000" /> <corners android:radius="0dp" /> </shape> </item> <item android:top="-1dp" android:bottom="0dp" android:left="-1dp" android:right="-1dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="@color/bottomline_btn" /> <solid android:color="#00000000" /> <corners android:radius="0dp" /> </shape> </item> </layer-list> </item> </selector> <color name="topline_btn">#31ffffff</color> <color name="bottomline_btn">#31000000</color> <color name="blue">#449def</color> <color name="blue_end">#2f6699</color> 1  <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android" > <item android:state_pressed="true" > <shape android:shape="rectangle"> <solid android:color="@color/blue_end" /> <padding android:left="10dp" android:top="10dp" android:right="10dp" android:bottom="10dp" /> <stroke android:width="1dp" android:color="@color/bottomline_btn" /> </shape> </item> <item> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape android:shape="rectangle"> <solid android:color="@color/blue" /> <gradient android:startColor="@color/blue" android:endColor="@color/blue_end" android:angle="270" /> </shape> </item> <item android:top="0dp" android:bottom="-1dp" android:left="-1dp" android:right="-1dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="@color/topline_btn" /> <solid android:color="#00000000" /> <corners android:radius="0dp" /> </shape> </item> <item android:top="-1dp" android:bottom="0dp" android:left="-1dp" android:right="-1dp"> <shape android:shape="rectangle"> <stroke android:width="1dp" android:color="@color/bottomline_btn" /> <solid android:color="#00000000" /> <corners android:radius="0dp" /> </shape> </item> </layer-list> </item> </selector> <color name="topline_btn">#31ffffff</color> <color name="bottomline_btn">#31000000</color> <color name="blue">#449def</color> <color name="blue_end">#2f6699</color> 

Вы пытались компенсировать это чем-то вроде этого

http://android.amberfog.com/?p=9

Мое решение состоит в том, чтобы добавить 9-патч в качестве последнего элемента слоя:

 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item> <shape> <solid android:color="@color/tab_button_active_layer2" /> </shape> </item> <item android:bottom="@dimen/tab_button_active_bottom_bar_width"> <shape> <solid android:color="@color/tab_button_active_layer1" /> </shape> </item> <!-- 9-patch drawable --> <item android:drawable="@drawable/tab_button_border_top"/> </layer-list>