Круговой градиент в андроиде

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

Как я делаю "нормальный" градиент, подобный этому, я экспериментировал с разными формами:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient android:startColor="#E9E9E9" android:endColor="#D4D4D4"
        android:angle="270"/>
</shape>

При использовании "овальной" формы я, по крайней мере, получил круглую форму, но эффекта градиента не было. Как я могу это достичь?

Ответ 1

Вы можете получить круговой градиент с помощью android:type="radial":

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient android:type="radial" android:gradientRadius="250"
        android:startColor="#E9E9E9" android:endColor="#D4D4D4" />
</shape>

Ответ 2

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

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

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

my_gradient_drawable

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <gradient
        android:type="radial"
        android:gradientRadius="10%p"
        android:startColor="#f6ee19"
        android:endColor="#115ede" />
</shape>

Что можно установить в атрибуте вида background, подобном этому

<View
    android:layout_width="200dp"
    android:layout_height="100dp"
    android:background="@drawable/my_gradient_drawable"/>

Центр

Вы можете изменить центр радиуса с помощью

android:centerX="0.2"
android:centerY="0.7"

где десятичные числа - это доли ширины и высоты для x и y соответственно.

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

Ответ 3

Я думаю, вы должны добавить android: centerColor

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient
  android:startColor="#FFFFFF"
  android:centerColor="#000000"
  android:endColor="#FFFFFF"
  android:angle="0" />
</shape>

В этом примере отображается горизонтальный градиент от белого до черного до белого.

Ответ 4

<gradient
    android:centerColor="#c1c1c1"
    android:endColor="#4f4f4f"
    android:gradientRadius="400"
    android:startColor="#c1c1c1"
    android:type="radial" >
</gradient>