구현 단계: 1. FlipView 개체를 정의합니다. 다음 속성을 포함합니다.
다음과 같이 코드 코드를 복사합니다 .
//정면도
공개 노드 frontNode;
//역시도
공개 노드 backNode;
//뒤집을지 말지
부울 반전 = false;
//플립 각도
DoubleProperty 시간 = new SimpleDoubleProperty(Math.PI / 2);
//앞으로 뒤집기 특수 효과
PerspectiveTransform frontEffect = new PerspectiveTransform();
//역방향 뒤집기 특수 효과
PerspectiveTransform backEffect = new PerspectiveTransform();
create 메소드는 표시할 콘텐츠를 반환합니다.
다음과 같이 코드 코드를 복사합니다 .
개인 무효 생성() {
time.addListener(새로운 ChangeListener() {
@보수
공개 무효 변경(ObservableValue<? 확장 번호> arg0,
숫자 arg1, 숫자 arg2) {
setPT(frontEffect, time.get());
setPT(backEffect, time.get());
}
});
anim.getKeyFrames().addAll(프레임1, 프레임2);
backNode.visibleProperty().bind(
Bindings.when(time.lessThan(0)).then(true).otherwise(false));
frontNode.visibleProperty().bind(
Bindings.when(time.lessThan(0)).then(false).otherwise(true));
setPT(frontEffect, time.get());
setPT(backEffect, time.get());
frontNode.setEffect(frontEffect);
backNode.setEffect(backEffect);
getChildren().addAll(backNode, frontNode);
}
위 코드에서 주목해야 할 점은 시간 값이 변경됨에 따라 frontEffect와 backEffect의 값도 변경된다는 점입니다. 2. PerspectiveTransform 특수 효과의 구현에서는 Math.sin() 및 Math.cos() 메서드를 사용하여 3D 각도 변환을 시뮬레이션합니다. 구체적인 구현은 다음과 같습니다.
다음과 같이 코드 코드를 복사합니다 .
개인 무효 setPT(PerspectiveTransform pt, double t) {
이중 너비 = 200;
이중 높이 = 200;
이중 반경 = 너비 / 2;
더블 백 = 높이 / 10;
pt.setUlx(radius - Math.sin(t) * 반경);
pt.setUly(0 - Math.cos(t) * 뒤로);
pt.setUrx(radius + Math.sin(t) * radius);
pt.setUry(0 + Math.cos(t) * 뒤로);
pt.setLrx(반경 + Math.sin(t) * 반경);
pt.setLry(높이 - Math.cos(t) * 뒤로);
pt.setLlx(radius - Math.sin(t) * 반경);
pt.setLly(높이 + Math.cos(t) * 뒤로);
}
3. 1초 만에 각도 변환이 3.14/2에서 -3.14/2로 변경됩니다.
다음과 같이 코드 코드를 복사합니다 .
KeyFrame 프레임1 = 새 KeyFrame(Duration.ZERO, 새 KeyValue(시간,
Math.PI / 2, Interpolator.LINEAR));
KeyFrame 프레임2 = 새 KeyFrame(Duration.seconds(1),
새로운 EventHandler() {
@보수
공개 무효 핸들(ActionEvent 이벤트) {
뒤집힌 = !뒤집힌;
}
}, new KeyValue(time, -Math.PI / 2, Interpolator.LINEAR));
4. FlipView 객체 생성: FlipView 객체는 생성자를 통해 쉽게 생성할 수 있습니다.
다음과 같이 코드 코드를 복사합니다 .
ImageView image1 = new ImageView(new Image(getClass()
.getResourceAsStream("lion1.png")));
ImageView image2 = new ImageView(new Image(getClass()
.getResourceAsStream("lion2.png")));
FlipView Flip = new FlipView(이미지1, 이미지2);
5. 렌더링: