Шаги реализации: 1. Определите объект FlipView. Содержит следующие свойства:
Скопируйте код кода следующим образом:
//Вид спереди
общедоступный узел frontNode;
//обратный вид
общедоступный узел backNode;
//Перевернуть ли
логическое перевернутое значение = ложь;
//перевернуть угол
Время DoubleProperty = новый SimpleDoubleProperty(Math.PI/2);
//Специальный эффект переворота вперед
PerspectiveTransform frontEffect = новый PerspectiveTransform ();
//Специальный эффект обратного переворота
PerspectiveTransform backEffect = новый PerspectiveTransform();
Метод create возвращает отображаемый контент:
Скопируйте код кода следующим образом:
частная пустота create() {
time.addListener(новый ChangeListener() {
@Override
общественная пустота изменена (ObservableValue<? расширяет номер> arg0,
Номер arg1, Номер arg2) {
setPT(frontEffect, time.get());
setPT(backEffect, time.get());
}
});
anim.getKeyFrames().addAll(frame1,frame2);
backNode.visibleProperty().bind(
Bindings.when(time.lessThan(0)).then(true).иначе(false));
frontNode.visibleProperty().bind(
Bindings.when(time.lessThan(0)).then(false).иначе(истина));
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() для имитации трехмерного углового преобразования. Конкретная реализация выглядит следующим образом:
Скопируйте код кода следующим образом:
Private void setPT (PerspectiveTransform pt, double t) {
двойная ширина = 200;
двойная высота = 200;
двойной радиус = ширина/2;
двойная спинка = высота/10;
pt.setUlx(радиус - Math.sin(t) * радиус);
pt.setUly(0 - Math.cos(t) * back);
pt.setUrx(радиус + Math.sin(t) * радиус);
pt.setUry(0 + Math.cos(t) * back);
pt.setLrx(радиус + Math.sin(t) * радиус);
pt.setLry(height - Math.cos(t) * back);
pt.setLlx(радиус - Math.sin(t) * радиус);
pt.setLly(height + Math.cos(t) * back);
}
3. Преобразование угла меняется с 3,14/2 на -3,14/2 за 1 секунду.
Скопируйте код кода следующим образом:
KeyFrameframe1 = новый KeyFrame(Duration.ZERO, new KeyValue(time,
Math.PI/2, Интерполятор.ЛИНЕЙНЫЙ));
Ключевой кадр 2 = новый ключевой кадр (длительность.секунды(1),
новый EventHandler() {
@Override
public void handle (событие ActionEvent) {
перевернутый = !перевернутый;
}
}, новое KeyValue(time, -Math.PI / 2, Interpolator.LINEAR));
4. Создание объектов FlipView. Объекты FlipView можно легко создать с помощью конструктора.
Скопируйте код кода следующим образом:
ImageView image1 = новый ImageView(новое изображение(getClass()
.getResourceAsStream("lion1.png")));
ImageView image2 = новый ImageView (новое изображение (getClass())
.getResourceAsStream("lion2.png")));
FlipView Flip = новый FlipView(image1, image2);
5. Рендеринг: