如何设置渐变样式来绘制对象?

Roh*_*n K 46 android gradient android-canvas

使用Style:Fill绘制箭头的代码如下:

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);
Run Code Online (Sandbox Code Playgroud)

我得到的输出是这样的:

在此输入图像描述

现在我想做的是将样式设置为Gradient(在android中没有Style.gradient ...)以获得类似于下面给出的图像的箭头:

在此输入图像描述

我该怎么做 ?我尝试在style.xml中添加样式但无法在那里添加渐变,因为它接受item作为参数..

Suj*_*jit 105

使用下面的代码..

paint.setShader(new LinearGradient(0, 0, 0, getHeight(), Color.BLACK, Color.WHITE, Shader.TileMode.MIRROR));
    canvas.drawPath(arrowPath, paint);
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这也适用于 TextPaint,例如,`paint.setShader(...` (2认同)

Hit*_*ahu 10

如果你想要不止一种颜色:

// 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))
Run Code Online (Sandbox Code Playgroud)

在 OnDraw()

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

canvas.drawPath(path, gradientPaint)
Run Code Online (Sandbox Code Playgroud)