版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
1、什么是时间轴动画?
答:我是这么理解的,跟时间有关的动画,比如:
- 几秒后执行某个动作
- 每隔几秒钟重复执行某个动作
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();
好了,多看注释!