2015-04-09 2 views
0

Я пытаюсь создать галерею изображений и использовать некоторые анимации изображений. Проблема заключается в ImageView. Я хотел бы play() RotateTransition с помощью какого-либо метода и вызвать этот метод в любое время, но он вообще не работает. Должна быть проблема с потоками, но даже если она вызывается из новой нити, ничего не происходит. Есть ли какое-либо решение, как работать с ImageView и Transitions в целом?JavaFX ImageView Transition

public class ImageGallery extends ImageView{ 
    RotateTransition rt; 

    public ImageGallery() { 
     setImage(new Image("/img/01.jpg")); 
     setPreserveRatio(true); 

     rt = new RotateTransition(Duration.millis(800), this); 
     rt.setByAngle(90); 

     //this works but not what I need 
     //fitWidthProperty().addListener(e -> rt.play()); 
    } 

    public void rotateRight(){ 
     rt.play(); //nothing 

     //run later is not working too 
     //Platform.runLater(new ViewTransition(this)); 
    } 
} 

Благодаря

+2

Пожалуйста, добавьте соответствующие фрагменты кода того, что вы пробовали. – ItachiUchiha

+0

Можете ли вы добавить код, в котором вы создаете «ImageGallery», и вызывая метод «rotateRight()»? – ItachiUchiha

+0

Я просто создаю новый объект 'ImageGallery' и называю' imageGallery.rotateRight() 'именно этим. –

ответ

0

В соответствии с комментариями пользователей в вопросе, добавив MCVE

Main.java

import javafx.application.Application; 
import javafx.geometry.Pos; 
import javafx.scene.Scene; 
import javafx.scene.layout.VBox; 
import javafx.stage.Stage; 

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception { 

     ImageGallery gallery = new ImageGallery(); 
     VBox box= new VBox(gallery); 
     box.setAlignment(Pos.CENTER); 
     Scene scene = new Scene(box, 400, 400); 
     primaryStage.setScene(scene); 
     primaryStage.show(); 
     gallery.rotateRight(); 
    } 

    public static void main(String[] args){ 
     launch(args); 
    } 

} 

ImageGallery.java

import javafx.animation.RotateTransition; 
import javafx.scene.image.Image; 
import javafx.scene.image.ImageView; 
import javafx.util.Duration; 

public class ImageGallery extends ImageView{ 
    RotateTransition rt; 

    public ImageGallery() { 
     setImage(new Image("http://jaxenter.com/wp-content/uploads/2013/03/javafx.1.png")); 
     setPreserveRatio(true); 
     rt = new RotateTransition(Duration.millis(800), this); 
     rt.setByAngle(90); 
    } 

    public void rotateRight(){ 
     rt.play(); 
    } 
} 
+0

Спасибо! :) Вы много времени спасли. Проблема заключалась в том, что я немного играл с одиночками (извините, забыл упомянуть, что я не знал, насколько это важно). В следующий раз я постараюсь более четко указать проблему. –

Смежные вопросы