Intereting Posts
Чтение файлов из ZIP-файла в папке с вашими Android-файлами Пакет совместимости Android – фрагмент … не привязан к работе GridLayout против TableLayout Android child view игнорировать родительское дополнение Android-объявления медленной производительности очень много Как использовать SharedPreferences для сохранения URI или любого хранилища? Какая версия Apache HttpClient используется в Android 4.2.2 SDK? Реализация пула потоков внутри службы Поместите Snackbar в наивысшем порядке z, чтобы избежать блокировки при выводе AutoCompleteTextView Невозможно вызвать getBootClasspath () до вызова setTargetInfo () Есть ли принятая передовая практика по созданию асинхронных HTTP-запросов в Android? Android – предотвратить копирование / вставку edittext и двойное нажатие выбрать все Доступ Android ADB к базам данных приложений без root Cordova / Phonegap Android – проблема Java / Ant при сборке? Правильный подход к веб-службе вызовов (API) из класса фрагментов

Прямоугольная форма с двумя сплошными цветами

Я хотел бы создать прямоугольную форму с двумя сплошными цветами (по горизонтали), чтобы добиться чего-то вроде этого:

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

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

Есть ли способ достичь этого с помощью lalyer-list или использовать что-то совершенно другое? Я хотел бы сохранить его простым с возможностью изменять цвета формы во время выполнения.

Благодарю.

Solutions Collecting From Web of "Прямоугольная форма с двумя сплошными цветами"

Для этого вы можете создать пользовательский вариант. Просто добавьте класс Drawable.

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

 public class ColorBarDrawable extends Drawable { private int[] themeColors; public ColorBarDrawable(int[] themeColors) { this.themeColors = themeColors; } @Override public void draw(Canvas canvas) { // get drawable dimensions Rect bounds = getBounds(); int width = bounds.right - bounds.left; int height = bounds.bottom - bounds.top; // draw background gradient Paint backgroundPaint = new Paint(); int barWidth = width / themeColors.length; int barWidthRemainder = width % themeColors.length; for (int i = 0; i < themeColors.length; i++) { backgroundPaint.setColor(themeColors[i]); canvas.drawRect(i * barWidth, 0, (i + 1) * barWidth, height, backgroundPaint); } // draw remainder, if exists if (barWidthRemainder > 0) { canvas.drawRect(themeColors.length * barWidth, 0, themeColors.length * barWidth + barWidthRemainder, height, backgroundPaint); } } @Override public void setAlpha(int alpha) { } @Override public void setColorFilter(ColorFilter cf) { } @Override public int getOpacity() { return PixelFormat.OPAQUE; } } 

Это наверняка нарисует форму согласно вашему Требованию:

Отрегулируйте размер <item> мере необходимости!

 <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item android:left="50dip"> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#0000FF" /> </shape> </item> <item android:right="50dip"> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="#ff0000" /> </shape> </item> </layer-list> 

Это даст вам два цвета пополам пополам. Поместите этот код в ресурс.

 <item android:top="320dip"> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="@color/red" /> </shape> </item> <item android:bottom="320dip"> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" > <solid android:color="@color/yellow" /> </shape> </item>