web-dev-qa-db-fra.com

Comment remplir un chemin en Android avec un dégradé linéaire?

Étant donné un objet Path fermé, le résultat est le suivant:

enter image description here

Bien que ce soit un rectangle, je cherche quelque chose qui fonctionne avec n'importe quel chemin fermé.

40
Carl Whalley

Alors que la réponse de Steelbytes vous donnera probablement plus de contrôle sur les sections individuelles du dégradé, vous pouvez le faire sans le chemin:

protected void onDraw(Canvas canvas)
{
    super.onDraw(canvas);
    Paint p = new Paint();
    // start at 0,0 and go to 0,max to use a vertical
    // gradient the full height of the screen.
    p.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR));
    canvas.drawPaint(p);
}
76
idbrii

cela peut aider

protected void onDraw(Canvas canvas)
{
    super.onDraw(canvas);
    int w = getWidth();
    int h = getHeight();
    Paint p = new Paint(Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG);
    Path pth = new Path();
    pth.moveTo(w*0.27f,0);
    pth.lineTo(w*0.73f,0);
    pth.lineTo(w*0.92f,h);
    pth.lineTo(w*0.08f,h);
    pth.lineTo(w*0.27f,0);
    p.setColor(0xff800000);
    p.setShader(new LinearGradient(0,0,0,h,0xff000000,0xffffffff,Shader.TileMode.CLAMP));
    canvas.drawPath(pth,p);
}   
30
SteelBytes