首页 文章

在Codename One上,以前的表单并没有完全消失

提问于
浏览
1

我用Codename One编写的应用程序涉及在主窗体中显示相机预览 . 我已经使用本机接口实现使其在Android上运行(iOS以后) .

该应用程序还包括在应用程序购买升级到完整版 . 这就是为什么定期显示表单以建议用户升级的原因 . 他们也可以选择稍后升级,这会导致此升级到完整版本表格消失,并使主要表单显示相机预览 .

然而,在真实设备上,有时升级到完整版本形式并没有完全消失,并且在主窗体上有回忆 . 在这种情况下,相机预览会显示在屏幕的一部分上,而应用程序按钮则不会显示 . 然而,如果用户触摸屏幕几秒钟后,主表单将完全显示并且升级表单的回忆消失 .

看起来在UI线程上可能有太多事情要做,但我只是在用户按下按钮关闭升级表单时调用 new MainForm(theme).show() . 所以这应该可以,不应该吗?请注意,CN1模拟器不显示edt违规(但模拟器中没有相机预览) .

或者在将组件添加到布局后,是否必须在MainForm中调用revalidate()?我应该怎么做才能使这些回忆消失?

任何帮助真的很感激,

2 回答

  • 0

    这些东西总是难以跟踪,但我猜测对等组件在某种程度上与新表单发生冲突 .

    确保你不要调用 postInvalidate ,除非你必须这样做,即便如此,你应该尽可能地限制和避免它,因为它可能与我们的绘图逻辑冲突 .

    另外,请确保您没有更改父表单的不透明度,例如如果您更改了表单UIID .

  • 0

    看起来已经找到了解决方案 . 事实上,我有一个原生方法初始化相机和surfaceview . 我在EDT上运行这个方法然后显示新的MainForm .

    实际上我在 invokeAndBlock() 块中接受了初始化方法 . 现在看起来这种滞后远远不那么明显(我看不到它) . 在我自己的逻辑中,我可以解释它 invokeAndBlock() 将在一个单独的线程上进行初始化工作,并且当它完全就绪时(因此可以显示相机和surfaceview),可以显示MainForm .

    这可能是@Shai的实际解决方案吗?

相关问题