Причина, по которой вы получаете только один с переходом, заключается в том, что из-за этой строки imgView=new ImageView();
установка последнего только для последнего задается, если вы создаете список и добавляете все их в этот список, а затем задаете ключевые кадры для всехиз них должно работать
Рабочий пример
public class Main extends Application {
private AnchorPane root;
private ArrayList<ImageView> imageViewArrayList = new ArrayList<>();
@Override
public void start(Stage primaryStage) throws FileNotFoundException {
Image img=new Image(new FileInputStream("plus.png"));
root = new AnchorPane();
for(int cont = 0 ; cont < 15 ; cont++)
{
ImageView imgView=new ImageView();
imgView.setImage(img);
imgView.setTranslateX( Math.random() * 800 );
imgView.setTranslateY( Math.random() * 400 );
imageViewArrayList.add(imgView);
root.getChildren().add(imgView);
//play();//I don't think you need this
}
new Timer().schedule(//Will keep infinitely firing every second
new TimerTask() {
@Override
public void run() {
play();
}
},
0,
1000);
Scene scene = new Scene(root, 800, 600);
primaryStage.setScene(scene);
primaryStage.show();
}
private void play() {
final Timeline timeline = new Timeline();
timeline.setCycleCount(2);
timeline.setAutoReverse(true);
//For animating All
//for (ImageView imageView : imageViewArrayList) {
// final KeyValue kFade = new KeyValue(imageView.opacityProperty(), 0);
// timeline.getKeyFrames().add(new KeyFrame(Duration.millis(1000), kFade));
//}
timeline.getKeyFrames().clear();//Remove Last
int randomIndex = (int) (Math.random() * imageViewArrayList.size());//Pick random Index
timeline.getKeyFrames().add(//Add random index
new KeyFrame(Duration.millis(1000),
new KeyValue(imageViewArrayList.get(randomIndex).opacityProperty(), 0)));
//timeline.setOnFinished(e -> play());//I don't think you need this
timeline.play();
}
public static void main(String[] args) { launch(args); }
}