JAVAFX初级认识 动态移动圆

package com.sun.javafx;

import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Node;
import javafx.scene.Scene;
import javafx.scene.effect.BlendMode;
import javafx.scene.effect.BoxBlur;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.StrokeType;
import javafx.stage.Stage;
import javafx.util.Duration;

import static java.lang.Math.random;

public class Example2 extends Application{
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		launch(args);
	}

	@Override
	public void start(Stage arg) throws Exception {

		Group root = new Group();

		Scene scene = new Scene(root, 800, 600, Color.BLACK);//设置场景的大小

		arg.setScene(scene);

		Group circles = new Group();

		//这些代码创建了称为 circles的Group,然后使用一个ofr循环向其中添加30个圆。每个圆半径到是150,并用white颜色填充,此外不透明度是5%,所以基本是透明的。
		//然后为这些圆创建边框,代码中包含了 StrokeType类。 描边类型的 OUTSIDE 标明圆的边界向外扩展StrokeWidth的值,也就是4。描边的颜色是 white,不透明度是16%,使得它比圆的颜色浅。
		//最后一行把 circles加到根节点上。这只是临时结构,稍候将修改场景图形使得它匹配 Figure 2展示那样。
		//Figure 4展示了当前应用。由于代码没有为每个圆指定特定位置,它们都叠加在一起,并且窗口的左上角是圆心。层叠的圆的不透明度和黑色北京作用使得圆看起来是灰色的。

		for (int i = 0; i < 30; i++) {
			Circle circle = new Circle(150, Color.web("white", 0.05));
			circle.setStrokeType(StrokeType.OUTSIDE);
			circle.setStroke(Color.web("white", 0.16));
			circle.setStrokeWidth(4);
			circles.getChildren().add(circle);
		}

		Rectangle colors = new Rectangle(scene.getWidth(), scene.getHeight(),
				new LinearGradient(0f, 1f, 1f, 0f, true, CycleMethod.NO_CYCLE, new 
						Stop[]{
						new Stop(0, Color.web("#f8bd55")),
						new Stop(0.14, Color.web("#c0fe56")),
						new Stop(0.28, Color.web("#5dfbc1")),
						new Stop(0.43, Color.web("#64c2f8")),
						new Stop(0.57, Color.web("#be4af7")),
						new Stop(0.71, Color.web("#ed5fc2")),
						new Stop(0.85, Color.web("#ef504c")),
						new Stop(1, Color.web("#f2660f")),}));
		
//		root.getChildren().add(colors);//添加矩形颜色
//		root.getChildren().add(circles);//添加舞台场景(背景)
		
		
		//删除矩形色变的其余部分!只留下圆内的!
		Group blendModeGroup = new Group(new Group(new Rectangle(scene.getWidth(), scene.getHeight(),
		        Color.BLACK), circles), colors);
		colors.setBlendMode(BlendMode.OVERLAY);
		root.getChildren().add(blendModeGroup);


		circles.setEffect(new BoxBlur(10, 10, 3));//代码设置了模糊半径,宽和高都是10并且迭代3次,使它接近高斯模糊。 这样便在圆的边缘出现了平滑效果

		Timeline timeline = new Timeline();
		for (Node circle: circles.getChildren()) {
		    timeline.getKeyFrames().addAll(
		        new KeyFrame(Duration.ZERO, // set start position at 0
		            new KeyValue(circle.translateXProperty(), random() * 800),
		            new KeyValue(circle.translateYProperty(), random() * 600)
		        ),
		        new KeyFrame(new Duration(40000), // set end position at 40s
		            new KeyValue(circle.translateXProperty(), random() * 800),
		            new KeyValue(circle.translateYProperty(), random() * 600)
		        )
		    );
		}
		// play 40s of animation
		timeline.play();
		arg.setTitle("JAVAFX   小阳初级认识");
		arg.show();
	}
}
 
JAVAFX初级认识 动态移动圆

你可能感兴趣的:(JavaFX,郏高阳,javafx基础,javafx源码基础)