`

JavaFX学习之Animation

阅读更多
   Animation 抽象类,提供动画功能。
方法
setAutoReverse(true);  //设置是否可以反转,反转算一次循环
setRate(1)  //设置完成时间的比率,1是在Duration时间内完成,2是比duration快一倍时间完成。
setDelay(Duration.seconds(3)) //设置延迟时间执行
setCycleDuration(Duration value) //循环的间隔
setOnFinished(EventHandler<ActionEvent> value)  //完成后处理事情
属性:
autoReverse
currentRate
currentTime
cycleCount
cycleDuration
delay
onFinished
rate
status
totalDuration 

   AnimationTimer
public class Animator extends AnimationTimer{
	
	Duration delayTime;
	private long last;
	
	public Animator(Duration delayTime){
		this.delayTime = delayTime;
	}

	@Override
	public void handle(long now) {
		if((now - last)/1000000>delayTime.toMillis()){
			last = now;
			pulse();
		}
	}
	
	public void pulse(){
                  //logic
		System.out.println("pulse");
	}

}

可以自己在handle中控制,什么时候调用你自己的逻辑。

Transition 抽象类,继承Animation,拥有一些实现子类,实现了特定的动画。
方法:
setInterpolator(Interpolator value)
getParentTargetNode()

FadeTransition 淡入淡出,其实就是修改opacity透明度属性
 
 	     Rectangle rect = new Rectangle (100, 40, 100, 100);
	     rect.setArcHeight(50);
	     rect.setArcWidth(50);
	     rect.setFill(Color.VIOLET);
	     FadeTransition ft = new FadeTransition(Duration.millis(3000), rect);
	     ft.setFromValue(1.0);
	     ft.setToValue(0.3);
	     ft.setCycleCount(4);
	     ft.setAutoReverse(true);
	     ft.play();
	     root.getChildren().add(rect);
  

opacity的值是0到1,所以设置fromvalue和tovalue在这之间。
FillTransition 颜色变化,针对shape,修改的fill属性。
public void buildFillTransition(Group root){
		Rectangle rec = new Rectangle(50,50,100,100);
		FillTransition ft = new FillTransition();
		ft.setDuration(Duration.seconds(5));
		ft.setFromValue(Color.BLACK);
		ft.setToValue(Color.WHITE);
		ft.setShape(rec);
		ft.play();
		root.getChildren().add(rec);
}

PathTransition按path移动,主要是调节translateX,Y
 
 	     PathTransition pathTransition = new  PathTransition();
	     pathTransition.setDuration(Duration.millis(10000));
	     pathTransition.setNode(rect);
	     pathTransition.setPath(path);
	     pathTransition.setOrientation(OrientationType.ORTHOGONAL_TO_TANGENT);
	     pathTransition.setCycleCount(4);
	     pathTransition.setAutoReverse(true);
	 
	     pathTransition.play();
	

属性:
duration
node
orientation
path

PauseTransition停止,就相当sleep了一下
 
 	     Rectangle rect = new Rectangle (100, 40, 100, 100);
	     rect.setArcHeight(50);
	     rect.setArcWidth(50);
	     rect.setFill(Color.VIOLET);
	 
	     RotateTransition rt = new RotateTransition(Duration.millis(3000), rect);
	     rt.setByAngle(180);
	     rt.setCycleCount(4);
	     rt.setAutoReverse(true);
	     SequentialTransition seqTransition = new SequentialTransition (
	         new PauseTransition(Duration.millis(1000)), // wait a second
	         rt
	     );
	     seqTransition.play();
	

方法:
setDuration(Duration value)
interpolate(double frac)
RotateTransition旋转,修改rotate属性,实现旋转
 
 	     Rectangle rect = new Rectangle (100, 40, 100, 100);
	     rect.setArcHeight(50);
	     rect.setArcWidth(50);
	     rect.setFill(Color.VIOLET);
	     RotateTransition rt = new RotateTransition(Duration.millis(3000), rect);
	     rt.setByAngle(180);
	     rt.setCycleCount(4);
	     rt.setAutoReverse(true);
	     rt.play();
	     root.getChildren().add(rect);
 

属性:
fromAngle
toAngle
byAngle
duration
axis
node

ScaleTransition大小,修改scale属性,实现大小变化
 		Rectangle rect = new Rectangle (100, 40, 100, 100);
	     rect.setArcHeight(50);
	     rect.setArcWidth(50);
	     rect.setFill(Color.VIOLET);
	     ScaleTransition st = new ScaleTransition(Duration.millis(2000), rect);
	     st.setByX(1.5f);
	     st.setByY(1.5f);
	     st.setCycleCount(4);
	     st.setAutoReverse(true);
	     st.play();	 	

StrokeTransition画笔的颜色变动,针对shape,修改stroke属性。

		Rectangle rec = new Rectangle(50,50,100,100);
		StrokeTransition st = new StrokeTransition();
		st.setDuration(Duration.seconds(5));
		st.setFromValue(Color.BLACK);
		st.setToValue(Color.RED);
		st.setShape(rec);
		st.play();
		root.getChildren().add(rec);
	


TranslateTransition位置移动(translateXYZ)修改translateX,Y,X
 		Rectangle rec = new Rectangle(50,50,100,100);
		TranslateTransition tt = new TranslateTransition();
		tt.setDuration(Duration.seconds(5));
		tt.setByX(400);
		tt.setNode(rec);
		tt.setAutoReverse(true);
		tt.setRate(2);
		//tt.setDelay(Duration.seconds(3));
		tt.setOnFinished(new EventHandler<ActionEvent>(){
			@Override
			public void handle(ActionEvent arg0) {
				System.out.println("finished");
			}
			
		});
		tt.play();
	


ParallelTransition同时运行多个animation 
SequentialTransition逐个运行animation

Interpolator 插值器,一般动画的变化都是线性增长,如你想改变增长的方式,则通过该类定义。
Timeline  通过timeline你可以自己实现一些动画。
KeyFrame  timeline最关键的是KeyFrame,代表一帧,可以看下它的构造方法
KeyFrame(Duration time, EventHandler<ActionEvent> onFinished, KeyValue... values)  //这一帧所执行的时间,执行完后做什么事情,还有一堆KeyValue在这一帧内的变化。
KeyValue  定义一个值在帧内的变化
KeyValue(WritableValue<T> target, T endValue)    //目标值,结束值。  目标值在这一帧内往结束值变化。
分享到:
评论

相关推荐

    javafx学习网站

    1. **JavaFXChina.Net**:该网站是国内知名的 JavaFX 学习资源站点之一,提供大量的教程和技术文档,适合初学者入门以及进阶学习。 - **主要特色**: - **详尽的文档**:涵盖 JavaFX 的各个方面,从基础概念到高级...

    Sprint-JavaFX-Animation:JavaFX动画的动画框架

    短跑 JavaFX的动画框架,使动画变得异常简单。推荐指南我做了一个更好的指南 我强烈建议您改为去那里。 您也可以在查看安装和演示只需从此页面的发行部分添加.jar即可安装Sprint。 您还可以运行.jar来查看使用Sprint...

    javafx版本植物大战僵尸

    在动画和时间管理方面,JavaFX的Timeline和Animation类提供了强大的工具。开发者可能利用这些类创建游戏中的动画效果,如植物的种植过程、僵尸的移动和攻击动作等,以保持游戏的流畅性和节奏感。 性能优化也是...

    JavaFX初学者指南

    1. **Scene Graph**:场景图是JavaFX的核心概念之一,所有可视化元素都以节点形式存在于一个树状结构中。 2. **UI Controls**:JavaFX 提供了一系列内置的UI控件,如按钮、文本框等,开发者可以直接使用这些控件来...

    JavaFX播放视频(flv)例子

    对于更复杂的多媒体应用,你还可以探索JavaFX的`Timeline`和`Animation`类,以实现更丰富的交互效果。 总之,这个"JavaFX播放视频(flv)例子"是一个很好的起点,可以帮助你掌握JavaFX的基本用法,并且逐步了解如何...

    CircleAnimation:绕圈旋转(JavaFX动画)

    解压后,开发者可以查看和运行源代码,学习如何将JavaFX动画技术应用于自己的项目中。 总之,JavaFX的动画系统为开发者提供了丰富的功能,使得创建动态用户界面变得简单且直观。通过掌握这些基础知识,你可以创造出...

    Tree animation

    为了实现"Tree animation",开发者需要具备扎实的Java基础知识,包括面向对象编程、事件处理、以及对Swing或JavaFX组件的理解。同时,熟悉动画原理和时间线控制也是必不可少的。通过实践和调试,我们可以创造出流畅...

    使用java 和 javafx完成的击落陨石的小游戏.zip

    2. **陨石生成与运动**:JavaFX的Timeline或Animation类可能被用来创建陨石的动画效果,使其从屏幕顶部随机位置向下运动。 3. **碰撞检测**:通过比较陨石和玩家飞船的位置,判断是否发生碰撞,这通常涉及到几何...

    大二Java课程设计,用JavaFx做一个“是男人就上一百层”的小游戏.zip

    3. **动画和定时器**:JavaFX的Timeline和Animation类可以创建流畅的动画效果,比如角色移动、楼层切换等。同时,Timer或ScheduledExecutorService可以用于定期执行某些任务,比如检查游戏是否达到新的层级或者时间...

    JGoodies Animation

    学习JGoodies Animation,首先应熟悉其基本概念,如动画对象、时间线和关键帧。然后,通过官方文档和示例代码来实践操作,理解如何创建和控制动画。此外,了解如何将动画效果与Java Swing或JavaFX等UI库结合也是必不...

    Kung_Fu_Master-JavaFX-KurtTaylan:JavaFX游戏

    4. **动画(Animation)**:JavaFX提供了Timeline、Transition等工具来创建动态效果,如角色的移动、攻击动作等。 5. **事件处理(Event Handling)**:游戏中的交互通常基于事件,如键盘输入、鼠标点击等,开发者...

    AnalogFXClock:带有 JavaFX 的模拟时钟

    总的来说,AnalogFXClock项目是JavaFX学习和实践的一个好例子,它涵盖了图形设计、事件处理和动画等核心概念,对理解JavaFX框架有很好的帮助。通过阅读和分析源代码,开发者可以深入学习JavaFX的特性和实际应用。

    blindpipes-javafx-game

    "Blindpipes-JavaFX-Game" 是一个基于JavaFX平台开发的游戏项目。JavaFX是一个用于构建桌面、移动和嵌入式设备上的丰富用户界面的框架。...通过深入研究这个项目,开发者可以学习到如何利用JavaFX构建自己的游戏。

    Animation:这是一个动画项目

    JavaFX提供Timeline和Animation Timeline类来实现这种类型的效果。 4. **Event Handling**: 在动画中,事件处理是非常重要的,因为用户交互常常触发动画。例如,点击按钮可能开始一个动画序列。 5. **...

    eclipse的动画实现

    import javafx.animation.TranslateTransition; import javafx.scene.layout.StackPane; import javafx.scene.shape.Rectangle; import javafx.stage.Stage; import javafx.util.Duration; public class ...

    java源码:Java实现移动的遮照效果.rar

    import javafx.animation.TranslateTransition; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.layout.Pane; import javafx.scene.paint.Color; import javafx.scene....

    Oriented_Programmation_Object:使用JavaFX开发视频游戏

    - **动画与定时器**:JavaFX的Timeline和Animation API可用于创建复杂的动画效果,定时器则用于控制游戏的节奏。 3. **图形与图像处理**: - **Canvas**:JavaFX的Canvas API允许开发者直接在画布上绘制图形,...

    PaintFX:用 JavaFX 编写的绘制程序的类项目

    总之,"PaintFX" 类项目是一个很好的学习资源,它结合了 JavaFX 的强大功能和绘画软件的实用特性,有助于开发者提升在图形界面开发领域的技能。通过研究该项目的源代码,可以深入了解 JavaFX 的工作原理,并将其应用...

    JavaFx-Redundant-Array-of-Independent-Disks:Java窗口应用程序,以JavaFX技术制成。 它是为学期项目准备的,目的是展示RAID的工作原理

    开发者可能使用了JavaFX的Scene、Stage、Nodes(如Button、Label、TableView等)和Animation API来构建交互式的界面,使用户能直观地了解RAID的工作机制。例如,用户可能能够添加虚拟硬盘,选择RAID级别,观察数据...

    fx-guybrush:一个基本的 JavaFX 示例,涵盖节点、事件和动画

    通过研究这个示例,初学者可以学习到如何在 JavaFX 中组织代码,创建用户界面,响应用户输入,并制作动态效果。对于有经验的开发者,它也可能作为一个快速参考,提醒他们关于 JavaFX 的关键特性。无论你是初涉 ...

Global site tag (gtag.js) - Google Analytics