4

ノードですでにトランジションが実行されているかどうかを確認するにはどうすればよいFadeTransitionですか?

4

3 に答える 3

3

TransitionはAnimationオブジェクトを拡張するため、いつでもTransitionstatusPropertyを使用できます。 別の変数は必要ありません。簡単に次のことができます。

FadeTransition fade = new FadeTransition()
fade.statusProperty().addListener(new ChangeListener<Status>() {

        @Override
        public void changed(ObservableValue<? extends Status> observableValue,
                        Status oldValue, Status newValue) {
                if(newValue==Status.RUNNING)
                    System.out.println("Animation is still running");

            }
        });
fade.play();

すべてのアニメーションを追跡することを想定していますが、ノードがアニメーションに含まれているかどうかを確認する方法はないと思います。とにかく、それは非常に強力なオブジェクトなので、Nodeクラスのドキュメントを確認することをお勧めします。お役に立てば幸いです、乾杯

于 2012-10-01T12:14:19.820 に答える
1

ご協力ありがとうございました。特定の問題に対して最終的に選択したソリューションを共有したいと思います。その次のとおりです。マウスクリックでノードをフェードしたかった。FadeTransitionクリック数が多い場合は、ちらつきやその他の現象を防ぐために、現在のクリックが終了したときにのみ新しいクリックを開始する必要があります。

私のアプローチは、関数の最初の行に表示されます。

@FXML
public void chartMouseClicked(MouseEvent event){
    if (ft.getCurrentRate()!=0.0d) return;      
    ft.play();
}

この場合、は「init」関数内で一度インスタンス化されるftタイプのプライベートフィールドです。FadeTransitionJavaFXのドキュメントによると、遷移が一時停止または停止したときにgetCurrentRate()戻ります。0.0トランジションを一時停止する必要がないので、これが私に適した方法です。値を確認し、トランジションが停止したときにもう一度再生させます。

于 2012-10-20T10:45:48.163 に答える
1

注:私はこれに関連することは何も試していません。これは、解決策というよりはスケッチです。コメントが長すぎるので、ここに概要を書きます。

ノードに関連付けられたブール値( "transitionPlaying")を作成でき、ノードで遷移が開始されるたびにtrueに設定できるように思われます。

次に、遷移ごとに、終了時の動作を定義します。

yourTransition.setOnFinished(new EventHandler<ActionEvent>(){
    public void handle(ActionEvent AE){
        transitionPlaying = false; 
}

これはあなたの最も基本的な質問に答えるだけであることに注意してください-移行が終了したかどうかを知りたい理由がわからないので、これ以上何も書くのは難しいです(移行が完了した後に何かをしたい場合は、全体が開きますワームの可能性があります。おそらく、トランジションが再生されている場合は、実行する次のトランジションをキューに追加し、setOnFinishedを定義して、キュー内の次のトランジションが完了したときに呼び出すことができます。)

追伸 このソリューションには、ノードでいつでも最大1つの遷移を再生できるという制限があります。

ノード上のすべての遷移が完了したかどうかを確認するために更新します

boolの代わりにintを使用することができ、開始する遷移ごとに、カウンターを1つインクリメントし、完了すると1つデクリメントします。このようにして、カウンターが「0」を読み取ったときにすべての遷移が実行されることがわかります。このようにして、私のソリューションは、ノード上のすべての遷移が完了したかどうかを知るという問題を解決します。

于 2012-09-30T19:35:24.120 に答える