|
/*
*
MediaViewNode.fx
*
*
Created on 2008. 11. 8, 오후 6:48:47
*/
package simplemovie;
/**
*
@author eclips
*/
import java.lang.System;
import javafx.scene.CustomNode;
import javafx.scene.*;
import javafx.input.*;
import javafx.scene.media.*;
import javafx.scene.effect.*;
import javafx.scene.paint.Color;
import javafx.scene.geometry.*;
import javafx.scene.transform.*;
import javafx.animation.Timeline;
import javafx.animation.KeyFrame;
import javafx.animation.Interpolator;
public class MediaViewNode extends
CustomNode {
/**
* 동영상 화면의 X Sacle
*/
public attribute viewScaleX:Number = 0.2;
/**
* 동영상 화면의 Y Scale
*/
public attribute viewScaleY:Number = 0.2;
/**
* MediaViewNode의 회전 반경
*/
public attribute rotation:Number = 0.0;
public attribute viewX:Number = 50;
public attribute viewY:Number = 40;
/**
* 현재 활성화 여부
*/
private attribute actived:Boolean = false;
/**
* 현재 Animation 중인지 여부
*/
private attribute moving:Boolean = false;
private attribute media:Media;
private attribute mediaView:MediaView;
private attribute strokeColor:Color = Color.DARKGRAY;
// 동영상 미디어 객체 URL
public attribute mediaURL:String on replace {
media = Media {
source: mediaURL
};
}
// Media Player 객체
private attribute player =
MediaPlayer {
media: media,
autoPlay: false
}
private attribute choiceTimeLine =
Timeline {
keyFrames : [
KeyFrame {
time: 0ms
values: [
viewScaleX =>
0.2,
viewScaleY => 0.2,
viewX => 10,
viewY => 10,
rotation => 0.0,
moving => true
]
},
KeyFrame {
time : 500ms
values: [
viewScaleX => 1.0
tween Interpolator.LINEAR,
viewScaleY => 1.0
tween Interpolator.LINEAR,
viewX => 40 tween
Interpolator.LINEAR,
viewY => 40 tween
Interpolator.LINEAR,
rotation => 360 tween
Interpolator.LINEAR,
moving => false
]
action: function():Void {
player.play();
mediaView.toFront();
actived = true;
}
}
]
};
private attribute unchoiceTimeLine =
Timeline {
keyFrames : [
KeyFrame {
time: 0ms
values: [
viewScaleX => 1.0,
viewScaleY => 1.0,
viewX => 40,
viewY => 40,
rotation => 360,
moving => true
]
},
KeyFrame {
time : 500ms
values: [
viewScaleX => 0.2
tween Interpolator.LINEAR,
viewScaleY => 0.2
tween Interpolator.LINEAR,
viewX => 10 tween
Interpolator.LINEAR,
viewY => 10 tween
Interpolator.LINEAR,
rotation => 0.0 tween
Interpolator.LINEAR,
moving => false
]
action: function():Void {
player.pause();
mediaView.toBack();
actived = false;
}
}
]
};
public function create():Node {
Group {
content: [
this.mediaView = MediaView {
mediaPlayer: player
scaleX: bind viewScaleX
scaleY: bind viewScaleY
translateX: bind viewX
translateY: bind viewY
transform: bind
[Transform.rotate(rotation,200,150)]
onMouseEntered:
function(me:MouseEvent):Void {
strokeColor =
Color.BLACK
}
onMouseExited:
function(me:MouseEvent):Void {
strokeColor =
Color.DARKGRAY
}
onMouseClicked:
function(me:MouseEvent):Void {
System.out.println("clicked => " + actived);
if(moving ==
false) {
if(actived) {
unchoiceTimeLine.start();
System.out.println("inactive
- " + viewScaleX);
}
else {
choiceTimeLine.start();
System.out.println("active - " + viewScaleX);
}
}
}
},
Rectangle {
width: 708
height: 472
scaleX: bind viewScaleX
scaleY: bind viewScaleY
translateX: bind viewX
translateY: bind viewY
stroke: strokeColor
strokeWidth: 10
transform: bind
[Transform.rotate(rotation,200,150)]
onMouseEntered:
function(me:MouseEvent):Void {
strokeColor =
Color.BLACK
}
onMouseExited:
function(me:MouseEvent):Void {
strokeColor =
Color.DARKGRAY
}
}
]
}
}
}
|
댓글을 달아 주세요