comment obtenir Android gradient Center effet de lumière?

Je veux quelque chose comme l'image suivante

entrez la description de l'image ici

Je l'ai essayé en utilisant la forme drawable

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
    android:angle="360"
    android:centerX="50%"
    android:centerY="50%"

    android:gradientRadius="50%"
    android:endColor="#000000"
    android:centerColor="#FFFFFF"
    android:startColor="#000000" >
</gradient>
</shape> 
30
demandé sur Ajeet Khadke 2013-10-23 16:43:25

5 réponses

Créez un nouveau fichier xml Android (disons GreyRadial.xml) dans votre dossier drawable

Dans votre fichier xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

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

</shape>

Utilisez ce xml dans votre arrière-plan de mise en page en utilisant

android:background="@drawable/GreyRadial"
71
répondu Himanshu Joshi 2013-10-23 13:15:43

L'effet peut être approximé dans une liste de calques en utilisant plusieurs formes rectangulaires. Utilisez un rectangle plein avec la couleur d'arrière-plan centrale. Ensuite, utilisez deux dégradés avec les mêmes couleurs de début et de fin. Rendre la couleur centrale la même aussi, sauf définir l'alpha à zéro.

Dans le code ci-dessous, les couleurs sont les suivantes:

@color/background_dark = #ffb8860b
@color/background_light = #ffd2b48c
@color/transparent = #00b8860b

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
        <shape >
            <solid android:color="@color/background_light"/>
        </shape>
    </item>

    <item>
        <shape>
            <gradient 
                android:startColor="@color/background_dark"
                android:centerColor="@color/transparent"
                android:endColor="@color/background_dark"
                android:angle="45"/>
        </shape>
    </item>

    <item>
        <shape>
            <gradient 
                android:startColor="@color/background_dark"
                android:centerColor="@color/transparent"
                android:endColor="@color/background_dark"
                android:angle="135"/>
        </shape>
    </item>

</layer-list>
14
répondu Steven Walters 2014-07-11 19:02:27

Une fois de plus solution:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
    <gradient
        android:centerX="50%"
        android:centerY="50%"
        android:endColor="@android:color/black"
        android:gradientRadius="100%"
        android:startColor="@android:color/transparent"
        android:type="radial"/>
</shape>
6
répondu Vadym 2018-05-22 05:57:37

Voici ma solution au problème.

<shape android:shape="rectangle">

 <gradient
     android:endColor="@color/your_dark_color"
     android:startColor="@color/your_light_color"
     android:type="radial"
     android:gradientRadius="700"/>

En changeant la valeur de android:gradientRadius j'ai pu obtenir les résultats exacts pour moi.

0
répondu Unaiza Khalid 2015-11-13 11:49:43

Si le rapport d'aspect de l'ovale dont vous avez besoin est fixe, vous pouvez utiliser le dégradé dessiné comme arrière-plan et utiliser scaleX ou scaleY pour l'étirer en ovale.

Drawable myradial.xml:

   <?xml version="1.0" encoding="utf-8"?>
   <shape xmlns:android="http://schemas.android.com/apk/res/android"
          android:shape="rectangle">
       <!--Radial gradient centered at middle of top with glow color-->
       <gradient
           android:startColor="FF336699"
           android:endColor="00000000"
           android:centerX="50%"
           android:centerY="50%"
           android:gradientRadius="50%"
           android:type="radial"/>
   </shape>

Voir l'utiliser comme arrière-plan

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

Si le rapport d'aspect n'est pas fixé, il est toujours possible de définir scaleX dans le code lors de l'exécution.

Cela ne fonctionnera pas pour tout le monde dans toutes les situations. Il peut faire des mises en page difficiles. Une bonne chose est que c'est un rendu unique pass, par rapport aux 3 passes de la solution très élégante affichée avec 2 gradients linéaires sur un solide. Il peut également être utilisé pour étirer tout en dégradé, par exemple pour créer un dégradé linéaire à 22,5 degrés.

0
répondu leorleor 2017-10-11 15:44:42