2016-09-25 72 views
1

在我的應用程序(媒體播放器)上,當應用程序處於全屏模式時,我正在淡出頂部欄和底部欄。我也想在幾秒鐘後淡出光標。我試過FadeTransition,但它只需要Node作爲參數。JavaFX中的Fadeout光標幾秒鐘後延遲

我也嘗試過使用線程。

Platform.runLater(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      try 
      { 
       Thread.sleep(2000); 
       scene.setCursor(Cursor.NONE); 
      } 
      catch (InterruptedException e) 
      { 
       e.printStackTrace(); 
      } 

     } 
    }); 

這裏我只是想在兩秒鐘後隱藏光標延遲。它的工作原理,但也掛我的申請兩秒鐘,我不指望。

以哪種方式我可以在兩秒鐘後淡出光標?

+1

關於透明度它也許可以創建相同的光標不同opacity.Then的10項不同的圖標非常快,從一個更改爲其他通過例如1秒,使用'ImageCursor'.Cause我很好奇的是,也許我會這樣做併發布代碼:) – GOXR3PLUS

+1

你在這裏:https://github.com/goxr3plus/JFXCustomCursor – GOXR3PLUS

+0

謝謝,我看到你的項目,這真的很不錯:) –

回答

5

由於您正在FX應用程序線程上進行阻止呼叫(Thread.sleep(...)),您的代碼會使UI掛起。如果你想這樣做,你應該阻塞後臺線程,並在暫停完成時安排FX應用程序線程上的光標更改。

一個簡單的方法,但是,僅僅是使用PauseTransition

PauseTransition pause = new PauseTransition(Duration.seconds(2)); 
pause.setOnFinished(e -> scene.setCursor(Cursor.NONE)); 
pause.play(); 

您可以使用此也使光標再次出現,當用戶做一些事情上,2秒後再次消失:

scene.addEventHandler(MouseEvent.ANY, e -> { 
    scene.setCursor(Cursor.DEFAULT); 
    pause.playFromStart(); 
}); 
+0

謝謝,第二部分爲我增加了額外的優勢。 另外,你能幫我關於淡出光標嗎?我想如果它會逐漸消失。 –

+0

我看不出有什麼辦法做到這一點。 'Cursor'沒有'opacity'屬性,我認爲沒有辦法從Node中創建'Cursor'。 –

+0

@James_D我正在使用一個'WritableImage'和一個'PixelWriter'來使圖像透明,而不是我得到一個黑色的矩形..爲什麼發生這種情況?'WritableImage'不支持透明? – GOXR3PLUS