web-dev-qa-db-fra.com

attribut d'angle dans Android gradient

Je passe par l'exemple de test. Où, pour certains arrière-plans d'image, ils utilisent un dégradé, le code va comme ceci

<?xml version="1.0" encoding="utf-8"?>


  <shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <gradient
        Android:startColor="#ff0000"
        Android:centerColor="#00ff00"
        Android:endColor="#0000ff"
        Android:angle="180"/>
    <corners Android:radius="5dp" />
   </shape>

Dans le xml ci-dessus, je n'ai pas obtenu l'attribut angle. mais quand je modifie légèrement la valeur de angle, le motif s'incline. Quelqu'un peut-il m'expliquer comment cela fonctionne exactement?

63
Sharanabasu Angadi

Le gradient représente fondamentalement la variation dans l'espace (dans une direction) de n'importe quelle quantité. Avec la couleur, il représente la variation de l'intensité de la couleur dans une direction représentée par l'angle. Voici quelques schémas pour représenter ce concept:
enter image description here

Ici, la figure montre la variation de couleur dans la direction horizontale (l'angle est défini sur 0).
Code XML:

    <shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <gradient
        Android:startColor="#000000"
        Android:angle="0"/>
   </shape>

enter image description here

Ici, la figure montre la variation de couleur dans la direction verticale (l'angle est réglé à 90).
Code XML:

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<gradient
    Android:startColor="#000000"
    Android:angle="90"/>
 </shape>

Vous pouvez également utiliser des couleurs différentes comme couleurs de début, de centre et de fin. Le code que vous avez joint contient tous ces éléments.

151
karn

vous voudrez peut-être créer un dégradé diagonal à partir du code. C'est beaucoup plus facile et vous avez beaucoup d'options ouvertes à partir de là. Cet extrait m'a aidé

public void SetGradient(View view) {
        GradientDrawable Gd = new GradientDrawable(
                GradientDrawable.Orientation.TL_BR,
                new int[]{0xFF141a24, 0xFF293f49, 0xFF72554c});
        view.setBackground(Gd);
    }

directions disponibles de la classe GradientDrawable

/*public enum Orientation {
        *//** draw the gradient from the top to the bottom *//*
        TOP_BOTTOM,
        *//** draw the gradient from the top-right to the bottom-left *//*
        TR_BL,
        *//** draw the gradient from the right to the left *//*
        RIGHT_LEFT,
        *//** draw the gradient from the bottom-right to the top-left *//*
        BR_TL,
        *//** draw the gradient from the bottom to the top *//*
        BOTTOM_TOP,
        *//** draw the gradient from the bottom-left to the top-right *//*
        BL_TR,
        *//** draw the gradient from the left to the right *//*
        LEFT_RIGHT,
        *//** draw the gradient from the top-left to the bottom-right *//*
        TL_BR,
    }*/

et vous appelez la méthode à partir de onCreate ou onCreateView en fragment et passez la vue parent (dans mon cas).

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.dialog_view_parent, container);           
        ...

        SetGradient(view);

        return view;
    }
10
Alex

Spécifie une couleur dégradée pour la forme. les attributs:

Android: angle Entier. L'angle du dégradé, en degrés. 0 est de gauche à droite, 90 est de bas en haut. Il doit s'agir d'un multiple de 45. La valeur par défaut est 0.

Il semble que la description dans la documentation contredit la réponse de karn ??

Vous pouvez trouver plus de détails dans la documentation

8
passerbywhu