Javafx的线性渐变重复似乎是反射颜色而不是重复。
我编写了一个简单的应用程序,展示了在自定义节点(StackPane)上使用线性渐变和重复创建条纹图案时看到的情况。在我的应用程序中,它们被添加为覆盖物到XYChart上,并且它们的高度是可变的。使用矩形并不起作用,这就是为什么我使用Stackpane并在其上设置样式而不是通过编程方式创建LinearGradient的原因。 颜色列表是动态的,并在应用程序中大小不同。 问题是linear-gradient如何翻转列表并在每次重复时反映颜色,而不只是重复。
此链接描述了类似的问题,但是仅添加无限制的停止看起来像是对我的问题的一种混乱的解决方案,最好只添加一次颜色并重复。
java.util.List;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
List<Color> colors = Arrays.asList( Color.RED,Color.BLUE,Color.YELLOW,Color.GREEN);
StackPane stackPane = new StackPane();
stackPane.setStyle(getLinearGradientStyle(colors));
root.setCenter(stackPane);
Scene scene = new Scene(root, 400, 400);
primaryStage.setScene(scene);
primaryStage.show();
}
catch (Exception e) {
e.printStackTrace();
}
}
private String getLinearGradientStyle(List<Color> colors) {
StringBuilder stringBuilder = new StringBuilder("-fx-background-color: linear-gradient(from 0px 0px to 10px 10px, repeat,");
for (int i = 0; i < colors.size(); i++) {
stringBuilder.append("rgb(")
.append((int) (colors.get(i).getRed() * 255)).append(",")
.append((int) (colors.get(i).getGreen() * 255)).append(",")
.append((int) (colors.get(i).getBlue() * 255))
.append(")")
.append(" ").append(getPercentage(i+1, colors.size()+1) );
if (i < colors.size() - 1) {
stringBuilder.append(",");
}
}
stringBuilder.append(");");
System.out.println("Main.getLinearGradientStyle():"+stringBuilder);
return stringBuilder.toString();
}
private String getPercentage(float i, int size) {
return (((1.0f / size) * 100 )*i)+ "%";
}
public static void main(String[] args) {
launch(args);
}
这是一个使用repeating-linear-gradient的CSS3示例: https://tympanus.net/codrops/css_reference/repeating-linear-gradient/ 在页面向下滚动,您会看到以下文本:将创建一个条纹背景,其中每个线性渐变都是三条纹理渐变,无限重复(这是示例)。
我的示例使用了对角线图案,这正是我所需要的,但上面的示例展示了我想在普通 CSS 中看到的具有不反射的连续色彩。谢谢任何帮助。