JavaFX+Jfoenix 学习笔记(六)--Timeline时间轴动画

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_26486347/article/details/96608107

1、什么是时间轴动画?

答:我是这么理解的,跟时间有关的动画,比如:

  1. 几秒后执行某个动作
  2. 每隔几秒钟重复执行某个动作

2、动画那么多,为什么我最先把时间轴动画拿出来说?

答:因为它给我的印象时非常好用,可以当动画用,更重要是可以用于延迟加载,至于怎么当作多线程用的的请看下一篇

3、案例:时间轴动画

利用时间轴动画每隔1秒改变一次背景色

package zkh.javafx.learn.timeline;

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.stage.Stage;
import javafx.util.Duration;

/**
 * Hello World
 */
// 继承javafx.application.Application是JavaFX的开始
public class Timeline1 extends Application {
	
	private int num = 1;
	private String[][] data = new String[][] {
		new String [] {"黑底白字", "-fx-background-color:black;-fx-text-fill:white;"},
		new String [] {"白底黑字", "-fx-background-color:white;-fx-text-fill:black;"},
	};

	/**
	 * Stage:就是你能看到的整个软件界面(窗口)
	 * Scene:就是除了窗口最上面有最大、最小化及关闭按钮那一行及窗口边框外其它的区域(场景)
	 * 场景(Scene)是一个窗口(Stage)必不可少的
	 */
	@Override
	public void start(Stage stage) throws Exception {
		// 创建一个标签,用于存放我们的Hello World文本,并设置让它在父容器中居中
		final Label label = new Label("时间轴动画:灰背景"); label.setAlignment(Pos.CENTER);
		label.setStyle(data[0][0]);
		
		
		// 时间轴
		Timeline timeline = new Timeline();
		// 动画执行的次数(Timeline.INDEFINITE表示随机,就是鬼才知道什么结束的那种)
		timeline.setCycleCount(Timeline.INDEFINITE);
		// 是否还原为初始状态(如果设置为true,会在执行次数内还会切换,至于这个初始状态什么意思自己体会吧)
		timeline.setAutoReverse(true);
		// 关键帧(当动画发生时,每个步骤都叫做关键帧,你可以添加多个关键帧)
		// 哲理我们设置为每隔1000毫秒执行一次
		KeyFrame keyFrame = new KeyFrame(Duration.millis(1000), new EventHandler<ActionEvent>() {
            public void handle(ActionEvent t) {
            	label.setText(data[num%2][0]);
            	label.setStyle(data[num%2][1]);
            	num++;
            }
        });
		timeline.getKeyFrames().add(keyFrame);
		timeline.play();
//		timeline.stop();
//		timeline.pause();
		
		
		// 1、初始化一个场景
		Scene scene = new Scene(label, 800, 600);
		// 2、将场景放入窗口
		stage.setScene(scene);
		// 3、打开窗口
		stage.show();
	}
	
	public static void main( String[] args ){
		// 启动软件
		Application.launch(args);
    }
    
}

效果动图:

4、源代码

// 时间轴
		Timeline timeline = new Timeline();
		// 动画执行的次数(Timeline.INDEFINITE表示随机,就是鬼才知道什么结束的那种)
		timeline.setCycleCount(Timeline.INDEFINITE);
		// 是否还原为初始状态(如果设置为true,会在执行次数内还会切换,至于这个初始状态什么意思自己体会吧)
		timeline.setAutoReverse(true);
		// 关键帧(当动画发生时,每个步骤都叫做关键帧,你可以添加多个关键帧)
		// 哲理我们设置为每隔1000毫秒执行一次
		KeyFrame keyFrame = new KeyFrame(Duration.millis(1000), new EventHandler<ActionEvent>() {
            public void handle(ActionEvent t) {
            	label.setText(data[num%2][0]);
            	label.setStyle(data[num%2][1]);
            	num++;
            }
        });
		timeline.getKeyFrames().add(keyFrame);
		timeline.play();

好了,多看注释!

猜你喜欢

转载自blog.csdn.net/qq_26486347/article/details/96608107