web-dev-qa-db-ja.com

グラデーションスタイルをPaintオブジェクトに設定する方法は?

スタイル:塗りつぶしで矢印を描くためのコードを以下に示します:

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);

そして、私が得る出力はこれです:

enter image description here

次に、スタイルをGradient(Style.gradientがAndroidに存在しない...)に設定して、以下に示す画像のような矢印を取得します。

enter image description here

どうすればいいのですか ? style.xmlにスタイルを追加しようとしましたが、アイテムをパラメーターとして受け入れるため、そこにグラデーションを追加できませんでした。

45
Rohan K

以下のコードを使用してください。

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

複数の色が必要な場合:

// 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))

onDraw()で

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

canvas.drawPath(path, gradientPaint)
2
Hitesh Sahu