Установить цвет фона для макета на градиент в Android? - PullRequest
25 голосов
/ 12 сентября 2011

Как указать, что "цвет" фона элемента представления макета Android должен быть градиентом (под определенным углом)?

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

Ответы [ 3 ]

82 голосов
/ 12 сентября 2011

создать gradient.xml в /res/drawable:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <gradient
        android:startColor="#FFFFFF"
        android:endColor="#00000000"
        android:angle="45"/>    
</shape>

и в вашем main.xml файле макета в /res/layout:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/gradient"
    >   
</LinearLayout>

Вы можете указать угол, заменив значение android:angle и начальный / конечный цвет, заменив android:startColor и android:endColor

9 голосов
/ 12 сентября 2011

Вы можете использовать что-то вроде этого:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="rectangle">
    <gradient android:startColor="#A1A1A1" 
              android:centerColor="#BDBDBD"
              android:endColor="#A4A4A4" 
              android:angle="-90" />
</shape>

, чтобы построить градиент (вы выбираете цвета, которые вам нравятся).Поместите это в drawable и вуаля, у вас есть своя собственная форма для использования в качестве фона: android:background="@drawable/the_name_of_your_xml"

5 голосов
/ 12 сентября 2011

Вот как я установил стиль градиента. Надеюсь это поможет. Но я использовал это для просмотра текста. Может потребоваться внести некоторые изменения, чтобы соответствовать фону макета.

            Shader textShader = new LinearGradient(0, 0, 0, 20, new int[] {
            Color.WHITE, getResources().getColor(//some color),
            getResources().getColor(//some color), Color.WHITE },
            new float[] {  0.25f,0.50f,0.75f, 1 }, TileMode.CLAMP);
            textview.getPaint().setShader(textShader);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...