2013-06-05 52 views
0

我已經很久沒有來過這裏,當然,直到現在。時間軸動畫無法按預期工作

的問題是,有一段代碼,我拼命地使其工作:

private Timeline timeline = createTimeline(); 
timeline.play(); 
public Timeline createTimeline() { 
Timeline timeline = new Timeline(); 
timeline.setDelay(new Duration(1000)); 
timeline.getKeyFrames().addAll(
     new KeyFrame(Duration.ZERO, new KeyValue(imageProperty(), moveOneStep())), 
     new KeyFrame(new Duration(250), new KeyValue(imageProperty(), moveOneStep()))); 
timeline.setCycleCount(Timeline.INDEFINITE); 
return timeline; 
} 
public Image moveOneStep() { 
    return getNextImage(); 
} 
private Image getNextImage() { 
    imgCount++; 
    if (imgCount > 2) 
     imgCount %= 3; 
    return images[imgCount]; 
} 

的問題是,雖然我已經試過之前和之後都設置循環計數無限期關鍵幀,它似乎沒有重複。我對這個有點困惑。

在此先感謝。

回答

1

看來你需要定義一個「關閉關鍵幀」,以便在最後一個關鍵幀之前可以播放。我懷疑,這是「按設計」還是錯誤。

timeline.getKeyFrames().addAll(
     new KeyFrame(Duration.ZERO, new KeyValue(imageProperty(), moveOneStep())), 
     new KeyFrame(new Duration(250), new KeyValue(imageProperty(), moveOneStep())), 
     new KeyFrame(new Duration(500)); 

您可以跟蹤任何財產的使用的ChangeListener的變化,例如:

imageProperty().addListener(new ChangeListener<Image>() { 
    @Override 
    public void changed(ObservableValue<? extends Image> observable, Image oldValue, Image newValue) { 
     System.out.println("imageProperty oldValue " + oldValue); 
     System.out.println("imageProperty newValue " + newValue); 
     System.out.println(""); 
    } 
}); 
+0

@ user1208478見更新。 –

+0

哦謝謝,但我自己也找到了答案。我以爲每次調用第二個關鍵幀時該屬性都會發生變化,這真是太愚蠢了。相反,該屬性會根據我們的方法進行漸變。我所需要的只是創建一個自定義事件處理程序並每250毫秒調用一次。 – lkn2993