299 votes

Comment faire un fond dégradé dans Android

Je veux créer un fond dégradé comme dans l'image. mais il ne peut pas en raison de la centerColore a été étendue pour couvrir en haut et en bas.

Comment puis-je faire un fond comme sur la photo ci-dessous? ou Comment puis-je faire de petits ceterColor que pas étalé? avez-vous une idée?

C'est dans ce contexte que je veux.

enter image description here

C'est dans ce contexte que j'ai fait.

enter image description here

C'est le code xml de fond le bouton ci-dessus

<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <gradient 
        android:startColor="#6586F0"
        android:centerColor="#D6D6D6"
        android:endColor="#4B6CD6"
        android:angle="90"/>
    <corners 
        android:radius="0dp"/>


</shape>

339voto

Pratik Sharma Points 5230

Essayez avec ceci:

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

    <gradient
        android:angle="90"
        android:centerColor="#555994"
        android:endColor="#b5b6d2"
        android:startColor="#555994"
        android:type="linear" />

    <corners 
        android:radius="0dp"/>

</shape>
 

J'espère que ça vous aide.

Merci.

66voto

Gunnar Karlsson Points 15071

Vous pouvez créer cet aspect de «demi-dégradé» en utilisant une liste de couches xml pour combiner les «bandes» supérieure et inférieure dans un seul fichier. Chaque groupe est une forme XML.

Voir cette réponse précédente sur SO pour un didacticiel détaillé: Formes multi-dégradées .

53voto

Hitesh542 Points 488

Le lien suivant peut vous aider à http://angrytools.com/gradient/ . Cela créera un fond dégradé personnalisé dans Android, comme dans Photoshop.

26voto

miroslavign Points 514

Ou vous pouvez utiliser dans le code ce que vous pourriez penser dans PSD:

     private void FillCustomGradient(View v) {
        final View view = v;
        Drawable[] layers = new Drawable[1];

        ShapeDrawable.ShaderFactory sf = new ShapeDrawable.ShaderFactory() {
            @Override
            public Shader resize(int width, int height) {
                LinearGradient lg = new LinearGradient(
                        0,
                        0,
                        0,
                        view.getHeight(),
                        new int[] {
                                 getResources().getColor(R.color.color1), // please input your color from resource for color-4
                                 getResources().getColor(R.color.color2),
                                 getResources().getColor(R.color.color3),
                                 getResources().getColor(R.color.color4)},
                        new float[] { 0, 0.49f, 0.50f, 1 },
                        Shader.TileMode.CLAMP);
                return lg;
            }
        };
        PaintDrawable p = new PaintDrawable();
        p.setShape(new RectShape());
        p.setShaderFactory(sf);
        p.setCornerRadii(new float[] { 5, 5, 5, 5, 0, 0, 0, 0 });
        layers[0] = (Drawable) p;

        LayerDrawable composite = new LayerDrawable(layers);
        view.setBackgroundDrawable(composite);
    }
 

2voto

Feras Arabiat Points 160

Pourquoi ne pas créer une image ou un 9 Patch image et l'utiliser?

Le lien ci-dessous est un bon guide sur la façon de le faire:

http://android.amberfog.com/?p=247

Si vous insistez sur l'utilisation d'une Forme, essayez le site ci-dessous (Sélectionnez Android en bas à gauche): http://angrytools.com/gradient/

J'ai créé un gradient similaire (pas exact) à celui que vous avez sur ce lien: http://angrytools.com/gradient/?0_6586f0,54_4B6CD6,2_D6D6D6&0_100,100_100&l_269

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X