2016-09-25 74 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