JavaFX之3 动画与事件处理
(1)JavaFx动画制作类似与FLASH,学过的都知道FLASH里是用帧来制作动画,JavaFx里也是根据帧来的。
首先动画制作要用到Timeline,也就是 javafx.animation.Timeline;
定义一个Timeline:
Timeline { keyFrames:[ at (0s) {x=>0.0} at (5s) {x=>200.0 tween Interpolator.LINEAR} }.play();
上面一例的完全形式也可以是:
Timeline { keyFrames:[ KeyFrame{ time: 0s values: x => 0.0 }, KeyFrame{ time:7s values:x =>200.0 tween Interpolator.LINEAR } }.play();
1.两个x,分别表示该动画的运动方式,从x=0到x=200.
2.Interpolator.LINEAR表示线性插值(汗。学过线性代数的都知道。。偶线性代数只是刚好过了。分不高。),当然也可以用其他插值形式,详情请自己查询API,javafx.animation.Interpolator里。。
3.最后的.play()方法,是指动画开始,也可以调用stop(),pause(),playFromStart()等方法.
4.注意上面例子里x是变量,需要定义。
下面我们就根据上面的动画知识,来做个简单的JavaFX动画吧。
import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.shape.Rectangle; import javafx.scene.paint.LinearGradient; import javafx.scene.paint.Color; import javafx.scene.paint.Stop; import javafx.animation.Timeline; import javafx.animation.Interpolator; var x:Number=20; var y:Number=20; def linear=LinearGradient { startX:0 startY:0 endX:1 endY:0 proportional:true stops:[ Stop{offset:0.0 color:Color.WHITE} Stop{offset:1.0 color:Color.GREEN} ] }; Timeline { autoReverse: true repeatCount: Timeline.INDEFINITE keyFrames:[ at (0s) {x=>0} at (6s) {x=>240 tween Interpolator.LINEAR} ] }.play(); Timeline { autoReverse: true repeatCount: Timeline.INDEFINITE keyFrames:[ at (0s) {y=>0} at (8s) {y=>290 tween Interpolator.LINEAR} ] }.play(); Stage { title:"JavaFx动画的小例子" width:300 height:400 visible:true scene:Scene{ fill:linear content:[ Rectangle{ x:bind x y:bind y width:50 height:80 fill:linear } ] } }
注意:
1.autoReverse: true是设置动画物体到末帧时会反弹回来~。这个挺方便的。repeatCount: Timeline.INDEFINITE,设置动画重复播放的。
2.上面用到的渐进色,在前一篇文章中讲过的。
3.关于定义,用var定义的话,以后变量可以改变。用def定义将不能改变~
由于是动画,请大家自己运行~效果图看不出来什么。
(2)事件处理
这里只讲一点键盘事件处理,上面做了个动画的小例子,但是运行过的人都发现,这个动画是无法控制的。也就是说,它是自动运行,然后不会停止。下面我们就来添加键盘事件,来控制它的播放,暂停,停止和从头开始吧。
键盘事件需要用到javafx.scene.input.KeyCode和javafx.scene.input.KeyEvent.
只是几个方法,我就不多说了。直接给出源码~
import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.shape.Rectangle; import javafx.scene.paint.LinearGradient; import javafx.scene.paint.Color; import javafx.scene.paint.Stop; import javafx.animation.Timeline; import javafx.animation.Interpolator; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.Group; var x:Number=20; var y:Number=20; def linear=LinearGradient { startX:0 startY:0 endX:1 endY:0 proportional:true stops:[ Stop{offset:0.0 color:Color.WHITE} Stop{offset:1.0 color:Color.GREEN} ] }; def timeline=Timeline { autoReverse: true repeatCount: Timeline.INDEFINITE keyFrames:[ at (0s) {x=>0} at (6s) {x=>240 tween Interpolator.LINEAR} ] }; Timeline { autoReverse: true repeatCount: Timeline.INDEFINITE keyFrames:[ at (0s) {y=>0} at (8s) {y=>290 tween Interpolator.LINEAR} ] }.play(); Stage { title:"JavaFx动画的小例子" width:300 height:400 visible:true scene:Scene{ fill:linear content:[ Group{ content:[ Rectangle{ x:bind x y:bind y width:50 height:80 fill:linear } ] onKeyPressed:function(evt:KeyEvent):Void { if(evt.code==KeyCode.VK_Z) { timeline.play(); } else if(evt.code==KeyCode.VK_X) { timeline.pause(); } else if(evt.code==KeyCode.VK_C) { timeline.stop(); } else if(evt.code==KeyCode.VK_V) { timeline.playFromStart(); } } } ] } }
1.Group就不多说了,就是一个组,可以把许多图形组成一个图形,事件处理可以只处理那组合后的图形~
2.上述事件处理,只监听了水平方向的运动。
程序运行效果是:
一开始它是竖直运行的,按Z键,开始水平运动,按X,暂停水平运动,按C,停止水平运动,按V,水平运动从头开始。
注意了,以上运行中,竖直方向的运动一直存在,加上水平运动后,就是合成运动了。
转载于:https://www.cnblogs.com/java-source/archive/2011/02/04/2604424.html
JavaFX之3 动画与事件处理相关推荐
- java小时钟实验报告_JAVA实验报告(运用JavaFx实现时钟动画).doc
JAVA实验报告(运用JavaFx实现时钟动画),javafx时钟,javafx动画,javafx等待动画,javafx动画效果,时钟动画,ppt时钟动画,时钟机关之星动画化,flash时钟动画,fl ...
- JavaFX官方教程(八)之JavaFX中的动画和视觉效果
翻译自 JavaFX中的动画和视觉效果 您可以使用JavaFX快速开发具有丰富用户体验的应用程序.在本入门教程中,您将学习如何使用非常少的编码创建动画对象并获得复杂的效果. 图7-1显示了要创建的应 ...
- javafx 动画没效果_通过JavaFX标注制作动画效果
javafx 动画没效果 在本文中,您将学习如何使用JavaFX的动画API创建标注. 您可以在https://www.youtube.com/watch?v=XTHbB0LRdT4的 YouTube ...
- 通过JavaFX标注制作动画效果
在本文中,您将学习如何使用JavaFX的动画API创建标注. 您可以在https://www.youtube.com/watch?v=XTHbB0LRdT4的 YouTube网站上查看这些标注的演示示 ...
- JavaFX官方教程(十一)之动画基础
翻译自 动画基础 动画基础提供基本动画概念,包含以下部分: 转变 时间线动画 插值 JavaFX中的动画可以分为时间轴动画和过渡.本章提供了每种动画类型的示例. Timeline并且Transit ...
- javafx动画_JavaFX:创建Sprite动画
javafx动画 到目前为止,尽管我的大多数文章都涉及JavaFX属性和绑定,但是今天我想写一讲我也致力于JavaFX运行时的另一部分:动画API. 在本文中,我将解释如何在JavaFX中编写自定义动 ...
- JavaFX:创建Sprite动画
到目前为止,尽管我的大多数文章都涉及JavaFX属性和绑定,但今天我想写一讲我也致力于JavaFX运行时的另一部分:动画API. 在本文中,我将解释如何在JavaFX中编写自定义动画,以及如何使用这种 ...
- JavaFX动画:有趣的AnimationTimer
AnimationTimer JavaFX有三类动画实现方式:Transition,TimeLine和AnimationTimer. AnimationTimer看起来像是一个计时器,其实他更适合叫做 ...
- Android动画及滑动事件冲突解决(转载)
原文链接:http://blog.csdn.net/singwhatiwanna/article/details/38168103 Android开发中动画和事件处理是程序员迈向高手的必经之路,也是重 ...
- JavaFX官方教程(四)之Hello World,JavaFX样式
翻译自 Hello World,JavaFX Style 教你创建和构建JavaFX应用程序的最佳方法是使用"Hello World"应用程序.本教程的另一个好处是,它使您能够 ...
最新文章
- Intent 的Flag属性(Activity在栈位置的主宰者)
- python线下培训-天津python培训,0基础学python线上还是线下好?
- XT910开通了GPRS却上不了网的原因--“数据漫游”功能关闭导致的
- cfile清空文件内容_电脑C盘文件夹哪些可以删除?教你如何快速清理,旧电脑还能用3年...
- java axis2 教程_webservice的Axis2入门教程java版
- 2020快手母婴行业数据价值报告
- php做一个微信退款,php实现微信支付之退款功能
- MAC安装Securecrt
- stdafx.h简介
- 网站优化加速经验总结
- 7-8 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company
- 单片机第1季:零基础学51单片机-蜂鸣器介绍
- 简单三招,教你做个app
- 前世今生只愿得一人心
- 持安科技孙维伯:实战零信任最佳实践
- 我的世界服务器告示牌不显示,我的世界告示牌没有字_我的世界告示牌不显示字怎么用_攻略...
- matlab画一元函数图
- iOS常用第三方集合(六)
- axure 8 表格合并_Word页面布局、“插入”选项卡及表格部分考点梳理
- 数据与程序的物理独立性、数据与程序的逻辑独立性、为什么数据库系统具有数据与程序的独立性?
热门文章
- 管理感悟:掌握工作的决定权
- 管理感悟:区分话的难听与对错
- 后台推送消息给app_uni-app 消息推送
- jqgrid dataevents change 只触发一次_王者荣耀:最难触发的4个被动,张飞上榜,他:我太难了!...
- python 线程同步_python线程同步
- qt 分辨率问题 安卓_Qt for Android dp转换
- python与sql server_Python和SQL Server 2017的强大功能
- 三朵云 华为_【创业前沿】华为突然传来大消息!对不起,我要辞职了!
- 汇编指令大全及标志位
- shell表达语句中,各种符号的释义 用法