【问题标题】:Fadeout Cursor in JavaFX After Few Seconds Delay几秒钟延迟后JavaFX中的淡出光标
【发布时间】:2016-09-25 14:32:16
【问题描述】:

在我的应用程序(媒体播放器)上,当应用程序处于全屏模式时,我正在淡出顶部栏和底部栏。我还想在延迟几秒钟后淡出光标。我试过FadeTransition,但它只需要Node作为参数。

我也尝试过使用线程。

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

        }
    });

这里我只是想在延迟两秒后隐藏光标。它可以工作,但也会让我的应用程序挂起两秒钟,这是我没想到的。

延迟两秒后,我可以通过什么方式淡出光标?

【问题讨论】:

  • 关于不透明度,有可能创建 10 个具有不同不透明度的相同光标的不同图标。然后非常快速地将它们从一个更改为另一个,例如 1 秒,使用 ImageCursor。因为我是对此感到好奇,也许我会这样做并发布代码。:)
  • 谢谢,我看过你的项目,真的很好:)
  • 很高兴听到! .

标签: javafx cursor javafx-8 fadeout


【解决方案1】:

您的代码导致 UI 挂起,因为您在 FX 应用程序线程上进行了阻塞调用 (Thread.sleep(...))。如果你想这样做,你应该在后台线程上阻塞,并在暂停完成时安排在 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();
});

【讨论】:

  • 谢谢,第二部分为我增加了额外的优势。另外,你能帮我淡出光标吗?我希望它会逐渐消失。
  • 我看不出有什么办法。 Cursor 没有 opacity 属性,我认为没有办法从 Node 中创建 Cursor
  • @James_D 我使用WritableImagePixelWriter 使图像透明,但我得到一个黑色矩形。为什么会这样?WritableImage 不支持透明?帮助表示赞赏..
猜你喜欢
  • 2011-12-30
  • 1970-01-01
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 1970-01-01
  • 2022-01-18
  • 2018-04-08
  • 2021-08-30
相关资源
最近更新 更多