可以使用徑向漸變使形狀看起來三維(立體)。
梯度繪制可以在兩種或更多種顏色之間內(nèi)插,這給出形狀的深度。JavaFX提供兩種類型的漸變:徑向漸變(RadialGradient
)和線性漸變(LinearGradient
)。
要在JavaFX中創(chuàng)建漸變顏色,需要設(shè)置五個(gè)屬性值。如下 -
proportional
屬性以指定是使用標(biāo)準(zhǔn)屏幕坐標(biāo)還是單位平方坐標(biāo)。NO_CYCLE
,REFLECT
或REPEAT
。通過將proportional
屬性設(shè)置為false
,可以基于標(biāo)準(zhǔn)屏幕(x
,y
)坐標(biāo)將漸變軸設(shè)置為起點(diǎn)和終點(diǎn)。
通過將proportional
屬性設(shè)置為true
,梯度軸線開始點(diǎn)和結(jié)束點(diǎn)將被表示為單位平方坐標(biāo)。 開始點(diǎn)和結(jié)束點(diǎn)的x
,y
坐標(biāo)必須在0.0
和1.0
之間(double
)。
要?jiǎng)?chuàng)建線性漸變涂料,為開始點(diǎn)和結(jié)束點(diǎn)指定startX
,startY
,endX
和endY
。起點(diǎn)和終點(diǎn)坐標(biāo)指定漸變模式開始和停止的位置。
下表列出了LinearGradient
屬性值 -
屬性 | 數(shù)據(jù)類型及描述 |
---|---|
startX | Double - 設(shè)置梯度軸起點(diǎn)的X 坐標(biāo)。 |
startY | Double - 設(shè)置梯度軸起點(diǎn)的Y 坐標(biāo)。 |
endX | Double - 設(shè)置梯度軸終點(diǎn)的X 坐標(biāo)。 |
endY | Double - 設(shè)置梯度軸終點(diǎn)的Y 坐標(biāo) |
proportional | Boolean - 設(shè)置坐標(biāo)是否與形狀成比例。設(shè)置為true 時(shí)則使用單位正方形坐標(biāo),否則使用屏幕坐標(biāo)系。 |
cycleMethod | CycleMethod - 設(shè)置應(yīng)用于漸變的循環(huán)方法。 |
stops | List<Stop> - 設(shè)置漸變顏色指定的停止列表。 |
以下代碼顯示了如何使用線性漸變來繪制矩形。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) {
VBox box = new VBox();
final Scene scene = new Scene(box, 300, 250);
scene.setFill(null);
Stop[] stops = new Stop[] { new Stop(0, Color.BLACK), new Stop(1, Color.RED) };
LinearGradient lg1 = new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);
Rectangle r1 = new Rectangle(0, 0, 100, 100);
r1.setFill(lg1);
box.getChildren().add(r1);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
上面的代碼生成以下結(jié)果。
下表列出了RadialGradient
屬性。
屬性 | 數(shù)據(jù)類型及描述 |
---|---|
focusAngle | Double - 設(shè)置從漸變中心到映射第一種顏色的焦點(diǎn)的角度(以度為單位)。 |
focusDistance | Double - 設(shè)置從漸變中心到映射第一種顏色的焦點(diǎn)的距離。 |
centerX | Double - 設(shè)置漸變圓的中心點(diǎn)的X 坐標(biāo)。 |
centerY | Double - 設(shè)置漸變圓的中心點(diǎn)的Y 坐標(biāo)。 |
radius | Double - 設(shè)置顏色漸變的圓的半徑。 |
proportional | boolean - 設(shè)置坐標(biāo)和大小與形狀成比例。 |
cycleMethod | CycleMethod - 設(shè)置應(yīng)用于漸變的Cycle方法。 |
Stops | List<Stop> - 設(shè)置漸變顏色的停止列表 |
現(xiàn)在來看看下面的示例代碼 -
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Circle;
import javafx.stage.Stage;
// => w W w .y i IB A I .C O M
public class Main extends Application {
static int dx = 1;
static int dy = 1;
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(final Stage primaryStage) {
primaryStage.setTitle("Animation");
Group root = new Group();
Scene scene = new Scene(root, 400, 300, Color.WHITE);
primaryStage.setScene(scene);
addBouncyBall(scene);
primaryStage.show();
}
private void addBouncyBall(final Scene scene) {
final Circle ball = new Circle(100, 100, 20);
RadialGradient gradient1 = new RadialGradient(0,
.1,
100,
100,
20,
false,
CycleMethod.NO_CYCLE,
new Stop(0, Color.RED),
new Stop(1, Color.BLACK));
ball.setFill(gradient1);
final Group root = (Group) scene.getRoot();
root.getChildren().add(ball);
}
}
上面的代碼生成以下結(jié)果。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Main extends Application {
// from W w w . y i I b a I. C o M
@Override
public void start(Stage stage) {
VBox box = new VBox();
final Scene scene = new Scene(box,300, 250);
scene.setFill(null);
// A rectangle filled with a linear gradient with a translucent color.
Rectangle rectangle = new Rectangle();
rectangle.setX(50);
rectangle.setY(50);
rectangle.setWidth(100);
rectangle.setHeight(70);
LinearGradient linearGrad = new LinearGradient(
0, // start X
0, // start Y
0, // end X
1, // end Y
true, // proportional
CycleMethod.NO_CYCLE, // cycle colors
// stops
new Stop(0.1f, Color.rgb(25, 200, 0, .4)),
new Stop(1.0f, Color.rgb(0, 0, 0, .1)));
rectangle.setFill(linearGrad);
box.getChildren().add(rectangle);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
上面的代碼生成以下結(jié)果。
以下代碼使用在對(duì)角方向上的綠色和黑色創(chuàng)建具有漸變的重復(fù)圖案的矩形。開始點(diǎn)(X
,Y
)和結(jié)束點(diǎn)(X
,Y
)值設(shè)置在對(duì)角線位置,循環(huán)方法設(shè)置為反射CycleMethod.REFLECT
。
CycleMethod.REFLECT
使梯度圖案在停止顏色之間重復(fù)或循環(huán)。
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Rectangle;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) {
VBox box = new VBox();
final Scene scene = new Scene(box, 300, 250);
scene.setFill(null);
// A rectangle filled with a linear gradient with a translucent color.
Rectangle rectangle = new Rectangle();
rectangle.setX(50);
rectangle.setY(50);
rectangle.setWidth(100);
rectangle.setHeight(70);
LinearGradient cycleGrad = new LinearGradient(50, // start X
50, // start Y
70, // end X
70, // end Y
false, // proportional
CycleMethod.REFLECT, // cycleMethod
new Stop(0f, Color.rgb(21, 25, 0, .784)), new Stop(1.0f, Color.rgb(0,
210, 0, .784)));
rectangle.setFill(cycleGrad);
box.getChildren().add(rectangle);
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
上面的代碼生成以下結(jié)果。