15

次のように定義された SweepGradient があります

circle_paint.setShader(new SweepGradient(getWidth()/2, getHeight()/2, new int[] { circle_start_color, circle_end_color}, new float[] { 0f, 1f}))

として定義されたアーチに適用されます。

canvas.drawArc(circle_bounds, circle_start_perc*360f, circle_end_perc*360f, true, circle_paint);

これはうまくいきますが、画面の上部から描画を開始するにはアーチが必要です。

canvas.drawArc(circle_bounds, ((circle_start_perc*360f)-90f)%360, circle_end_perc*360f, true, circle_paint);

問題は、SweepGradient がまだ 0 度から開始しているように見えることです。270 度から開始する必要があります (円弧の描画で行われた変換と同様)。言い換えれば、白から青へのグラデーションがある場合、弧の上部を白く塗りつぶし、弧の最後の部分を青く塗りつぶす必要があります。これどうやってするの?

4

2 に答える 2

20

getLocalMatrix()を使用して、シェーダーに回転を適用setLocalMatrix()してみてください。SweepGradient現在のマトリックスを取得し、で適切な回転を投稿しpostRotate()てから、シェーダー要素に戻すことができます。

別のオプションは、Canvas代わりに回転することです。Canvasを事前に回転させ、コンテンツを描画してから復元することができます。または、最初にコンテンツを描画してから、事後にキャンバスを回転させます。

于 2012-11-15T19:03:22.553 に答える