JavaFX 圆形线性渐变按百分比填充
JavaFX Circle Linear Gradient Fill by Percentage
我只想使用两个圆圈和线性渐变为客户指示 he/she 使用了多少 his/hers data/sms/voice,但有些值的表现并不理想。我怎样才能使它们的行为与左图中的一样?
这是我用来创建渐变的代码:
private void createCircleBar(int x, int y, int usedAmount, int remainingAmount) {
int totalAmount = usedAmount + remainingAmount;
int percentage = 100*usedAmount/totalAmount;
Circle outerCircle = new Circle(x,y,50);
LinearGradient g = LinearGradient.valueOf("from 0.0% 100.0% to 0.0% 0.0% rgb(14,170,0) 0.0%, rgb(14,170,0) "+(100-percentage)+"%, rgb(148,0,0) "+percentage+"%,rgb(148,0,0) 100.0%");
outerCircle.setFill(g);
anchor.getChildren().add(outerCircle);
Circle innerCircle = new Circle(x,y,39);
innerCircle.setFill(Color.WHITE);
anchor.getChildren().add(innerCircle);
}
我认为您想要做的是从顶部开始使用红色 rgb(148,0,0)
,向下延伸由 percentage
确定的量,然后是绿色 rgb(14, 170, 0)
从那一点到底部,两种颜色之间没有实际的颜色渐变。
A LinearGradient
将在您指定的任何“色标”之间插入颜色。因此,要在两种颜色之间创建硬变化,您需要在同一位置有两个色标,一种颜色变为另一种颜色。
以下是我认为您正在寻找的内容:
LinearGradient g = LinearGradient.valueOf(
"from 0.0% 0.0% to 0.0% 100.0% "+ // from top to bottom
"rgb(148, 0, 0) 0%, "+ // red at the top
"rgb(148, 0, 0) "+percentage+"%, "+ // red at percentage
"rgb(14, 147, 0) "+percentage+"%, "+ // green at percentage
"rgb(14, 147, 0) 100%" // green at the bottom
);
请注意,您可以直接使用 "from top to bottom "
而不是 "from 0% 0% to 0% 100% "
。
我只想使用两个圆圈和线性渐变为客户指示 he/she 使用了多少 his/hers data/sms/voice,但有些值的表现并不理想。我怎样才能使它们的行为与左图中的一样?
这是我用来创建渐变的代码:
private void createCircleBar(int x, int y, int usedAmount, int remainingAmount) {
int totalAmount = usedAmount + remainingAmount;
int percentage = 100*usedAmount/totalAmount;
Circle outerCircle = new Circle(x,y,50);
LinearGradient g = LinearGradient.valueOf("from 0.0% 100.0% to 0.0% 0.0% rgb(14,170,0) 0.0%, rgb(14,170,0) "+(100-percentage)+"%, rgb(148,0,0) "+percentage+"%,rgb(148,0,0) 100.0%");
outerCircle.setFill(g);
anchor.getChildren().add(outerCircle);
Circle innerCircle = new Circle(x,y,39);
innerCircle.setFill(Color.WHITE);
anchor.getChildren().add(innerCircle);
}
我认为您想要做的是从顶部开始使用红色 rgb(148,0,0)
,向下延伸由 percentage
确定的量,然后是绿色 rgb(14, 170, 0)
从那一点到底部,两种颜色之间没有实际的颜色渐变。
A LinearGradient
将在您指定的任何“色标”之间插入颜色。因此,要在两种颜色之间创建硬变化,您需要在同一位置有两个色标,一种颜色变为另一种颜色。
以下是我认为您正在寻找的内容:
LinearGradient g = LinearGradient.valueOf(
"from 0.0% 0.0% to 0.0% 100.0% "+ // from top to bottom
"rgb(148, 0, 0) 0%, "+ // red at the top
"rgb(148, 0, 0) "+percentage+"%, "+ // red at percentage
"rgb(14, 147, 0) "+percentage+"%, "+ // green at percentage
"rgb(14, 147, 0) 100%" // green at the bottom
);
请注意,您可以直接使用 "from top to bottom "
而不是 "from 0% 0% to 0% 100% "
。