Подтвердить что ты не робот

Android LinearGradient XML

У меня возникла небольшая проблема с определением LinearGradient в XML. Я хочу использовать конструктор, который принимает массив цветов и массив позиций.

Этот:

    LinearGradient(float x0, float y0, float x1, float y1, 
int[] colors, float[] positions, Shader.TileMode tile)

Как передать массив в XML? Вот пример XML с определением градиента, но простой.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#474946"
        android:endColor="#181818"
        android:angle="270"/>
    <corners android:radius="5dp" />
</shape>
4b9b3361

Ответ 1

Вам нужно сделать это в Java-коде. ShapeDrawable1.java из API Demos имеет пример.

Shape Drawable детализирует, что доступно в xml.

Ответ 2

К сожалению, определение GradientDrawable с XML не позволяет использовать более трех цветов.

Взгляните на официальную ссылку: http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html.

Пример:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:startColor="#474946"
        android:centerColor="#ff0000"
        android:endColor="#181818"
        android:angle="270"/>
    <corners android:radius="5dp" />
</shape>

Итак, в вашем случае вы добавите еще один цвет, используя android:CenterColor. Но для более чем трех цветов вам даже понадобится сделать это с помощью Java.

Ответ 3

@Juriy, @ErickPetru:

+1 для ответа ErickPetru. Хотя я хотел бы упомянуть, что есть еще одна доступная функция: нельзя указать только centerColor, но также и центральное смещение, что позволяет получить дополнительную гибкость и иногда помогает избежать необходимости кодирования Java.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >
    <corners
        android:radius="5dp" />
    <gradient
        android:type="linear"
        android:startColor="#FF000000"
        android:centerColor="#FF303030"
        android:endColor="#FFE0E0E0"
        android:centerX="0.2"
        android:centerY="0.3"
        android:angle="270" />
</shape>

Ответ 4

У вас есть опция, если вы создаете Gradient на java.

LinearGradient lg = new LinearGradient(0, 0, width, height,
            new int[]{Color.GREEN, Color.GREEN, Color.WHITE, Color.WHITE},
            new float[]{0,0.5f,.55f,1}, Shader.TileMode.REPEAT);

Установите этот фон в свой фон.