web-dev-qa-db-fra.com

Comment définir un style de dégradé sur un objet Paint?

Le code pour dessiner une flèche avec Style: Fill est donné ci-dessous:

Paint.setColor(Color.parseColor("#bdc0dc"));
Paint.setStyle(Style.FILL);
canvas.drawPath(arrowPath, Paint);
Paint.setColor(Color.BLACK);
Paint.setStyle(Style.STROKE);
Paint.setStrokeWidth(2);
canvas.drawPath(arrowPath, Paint);

Et la sortie que j'obtiens est la suivante:

enter image description here

Maintenant, ce que je veux faire, c'est définir le style sur Gradient (Style.gradient non présent dans Android ...) pour obtenir la flèche similaire à l'image ci-dessous:

enter image description here

Comment fait-on ça ? J'ai essayé d'ajouter du style dans style.xml mais je n'ai pas pu y ajouter de dégradé car il accepte l'élément comme paramètre.

45
Rohan K

utilisez le code ci-dessous ..

Paint.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR));
    canvas.drawPath(arrowPath, Paint);
104
Sujit

Si vous voulez plus d'une couleur:

// Gradient Shade colors distribution setting uniform for now
private val positions = null //floatArrayOf(0f, 0.3f, 0.6f)

// Gradient Shade colors
private val colors = intArrayOf(
        ContextCompat.getColor(context,
                R.color.divider_gradient_start_color),
        ContextCompat.getColor(context,
                R.color.divider_gradient_center_color),
        ContextCompat.getColor(context,
                R.color.divider_gradient_end_color))

dans OnDraw ()

// Add Shader
gradientPaint.shader = LinearGradient(0f, 0f, measuredWidth.toFloat(),0f, 
                colors, 
                positions,
                Shader.TileMode.CLAMP)

canvas.drawPath(path, gradientPaint)
2
Hitesh Sahu