如何在给定的Shape中旋转LinearGradient?

时间:2014-09-19 13:07:44

标签: java javafx javafx-2 javafx-8

我尝试找到旋转嵌套到例如LinearGradient对象的方法。 Rectangle对象,比如说:

Rectangle rect = new Rectangle(0, 0, 200, 200);

LinearGradient lg = new LinearGradient(0, 0, 100, 0, false, CycleMethod.REPEAT, new Stop[] {
    new Stop(0, Color.BLACK);
    new Stop(0.5, Color.WHITE);
    new Stop(1, Color.BLACK);
});

rect.setFill(lg);

enter image description here

现在,我尝试旋转此lg对象,例如向左旋转45度,但不旋转整个rect。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:11)

赋予LinearGradient构造函数的第一个参数分别是渐变轴的起点和终点的坐标。这意味着您可以实现"旋转"只需通过适当旋转的轴即可实现渐变。

在最简单的形式中,对于您所描述的示例,您可以使用以下模式:

double angleInRadians = Math.toRadians(45);
double length = 100; 

double endX = Math.cos(angleInRadians) * length;
double endY = Math.sin(angleInRadians) * length;

LinearGradient lg = new LinearGradient(0, 0, endX, endY, ...);

这将导致渐变旋转45度。

此处的固定值将影响渐变的最终外观以及其他参数。参考您的示例,此渐变具有相同的波长"和以前一样(即100),并在左上角以相同的颜色开始(即Color.BLACK将位于坐标(0,0))。