最近体验了一把JavaFX。自己做了一个小小的Demo,自己把它称为“弹跳的视频球”。
效果如下:
简单写一下实现方法:
首先,建立一个fx文件,在其中放入一个Stage。顺带往里面添加一些属性
- Stage{
- title: "Jumping Video"
- x:50
- y:10
- width: 300
- height: 315
- scene: Scene {
- fill: Color.rgb(255, 255, 255)
- width:300
- height:315
- }
- }
然后定义一个Media对象,用于放置自己的视频文件信息
- var m_path : String = "{__DIR__}huapi.flv";
- var m_media : Media = Media{
- source: bind m_path
- };
有了Media后,当然就要定义一个MediaPlayer对象,把其中的media属性绑定到刚才定义的m_media
- var m_mediaPlay : MediaPlayer = MediaPlayer{
- media: bind m_media
- autoPlay: true
- volume: 1;
- };
接着再定义一个MediaView对象,把其中的mediaplayer属性绑定到前面定义的m_mediaPlay
- var m_x2 : Number = 0;
- var m_y : Number = 50;
- var m_mediaView : MediaView = MediaView{
- mediaPlayer: bind m_mediaPlay;
- fitHeight: 250
- fitWidth: 300;
- x: bind m_x2;
- y: bind m_y - 120;
- smooth: true;
- }
把这个m_mediaView放到我们的Stage当中的content之下:
- Stage{
- title: "Jumping Video"
- x:50
- y:10
- width: 300
- height: 315
- scene: Scene {
- fill: Color.rgb(255, 255, 255)
- content: [m_mediaView]
- width:300
- height:315
- }
- }
至此,就已经成功的视频文件放入我的程序当中播放了。
接下来就是要把这个原始的视频做成一个小“视频球”。其实,就是要在视频里切出一个圆形轮廓。
为此,首先要在程序中添加一个Arc对象:
- var m_width : Number = 105;
- var m_height : Number = 50;
- var m_arc : Arc = Arc{
- centerX:150;
- centerY:bind m_y;
- radiusX:bind m_width;
- radiusY:bind m_height;
- startAngle: 0;
- length: 360
- type:ArcType.ROUND
- opacity:1
- visible:true
- }
然后,修改m_mediaView中的代码,添加一行cilp属性:
- var m_mediaView : MediaView = MediaView{
- mediaPlayer: bind m_mediaPlay;
- fitHeight: 250
- fitWidth: 300;
- x: bind m_x2;
- y: bind m_y - 120;
- smooth: true;
- clip:m_arc;
- }
现在,这个“视频球”就算是像模像样了。
接下来,在程序当中添加3个Timeline实现“视频球”的上下弹跳动画:
- var timeline1 : Timeline = Timeline {
- repeatCount: Timeline.INDEFINITE
- keyFrames: [
- KeyFrame {
- time: 0s
- values:{
- m_y => 50 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 15s
- values:{
- m_y => 250 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 17s
- values:{
- m_y => 290 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 19s
- values:{
- m_y => 250 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 34s
- values:{
- m_y => 50 tween Interpolator.LINEAR;
- }
- }
- ]
- };
- var timeline2 : Timeline = Timeline {
- repeatCount: Timeline.INDEFINITE
- keyFrames: [
- KeyFrame {
- time: 0s
- values:{
- m_height => 50 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 2s
- values:{
- m_height => 90 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 15s
- values:{
- m_height => 90 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 17s
- values:{
- m_height => 50 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 19s
- values:{
- m_height => 90 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 32s
- values:{
- m_height => 90 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 34s
- values:{
- m_height => 50 tween Interpolator.LINEAR;
- }
- }
- ]
- };
- var timeline3 : Timeline = Timeline {
- repeatCount: Timeline.INDEFINITE
- keyFrames: [
- KeyFrame {
- time: 0s
- values:{
- m_width => 105 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 2s
- values:{
- m_width => 90 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 15s
- values:{
- m_width => 90 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 17s
- values:{
- m_width => 105 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 19s
- values:{
- m_width => 90 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 32s
- values:{
- m_width => 90 tween Interpolator.LINEAR;
- }
- }
- KeyFrame {
- time: 34s
- values:{
- m_width => 105 tween Interpolator.LINEAR;
- }
- }
- ]
- };
- timeline1.play();
- timeline2.play();
- timeline3.play();
至此,一个最为简单的“弹跳的视频球”出现了~~