我有一个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度开始(类似于在圆弧图形上完成的平移)。换句话说,如果我具有从白色到蓝色的渐变,则需要将圆弧的顶部涂成白色,并将圆弧的最后部分涂成蓝色。我怎样才能做到这一点?

最佳答案

您可以尝试在getLocalMatrix()上使用setLocalMatrix()SweepGradient将旋转应用于着色器。您可以获取当前的Matrix,使用postRotate()发布适当的旋转,然后将其设置回shader元素。

另一种选择是改为旋转Canvas。您可以预旋转“ Canvas ”,绘制内容,然后将其还原。或先绘制内容,然后在事实之后旋转 Canvas 。

10-07 18:46