3 votes

cercle avec gradient conique dans Android

Quelqu'un sait-il comment définir un gradient conique dans Android ? Comme dans cette image :

http://www.astutegraphics.com/images/blog/tutorials/how_to_create_true_gears_18_oct_2011/29.png

3voto

Bien sûr, utilisez un SweepGradient puis dessinez un cercle avec sur une toile.
Un exemple peut être trouvé ici . Amusez-vous bien !

Si vous n'avez pas besoin de trop de couleurs, vous pouvez également les définir via xml :

/res/drawable/sweepgradient.xml :

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

<shape xmlns:a="http://schemas.android.com/apk/res/android"
        a:shape="oval"
        a:dither="true">

    <gradient a:type="sweep"
            a:startColor="#FFFF0000"
            a:centerColor="#FF0000FF"
            a:endColor="#FF00FF00" />

</shape>

Un SweepGradient est un composant natif. Vous ne pouvez donc pas compter sur les confortables stacktraces de Javas. Si vous obtenez des erreurs ne provenant pas de la pile, vérifiez d'abord tous les composants natifs.

Voici un exemple rapide :

    import android.content.Context;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.Paint;
    import android.graphics.SweepGradient;
    import android.view.View;

    public class GradientView extends View {

    // Edit these values as you want!
    private static int[] mColors={Color.RED, Color.GREEN, Color.BLUE};

    private Paint mPaint=new Paint();
    private boolean mSetShader=false;

    public GradientView(Context context) {
        super(context);
        mPaint.setAntiAlias(true);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        float cX=getWidth()/2F, cY=getHeight()/2F;

        if (!mSetShader) {
            mPaint.setShader(new SweepGradient(cX, cY, mColors, null));
            mSetShader=true;
        }

        canvas.drawCircle(cX, cY, Math.min(cX, cY), mPaint);
    }

}

Notez que vous voudrez peut-être recréer le SweepGradient si le centre change (si la vue est redimensionnée). J'ai laissé de côté les constructeurs supplémentaires et onMeasure pour plus de simplicité...

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