我用Codename One编写的应用程序涉及在主窗体中显示相机预览 . 我已经使用本机接口实现使其在Android上运行(iOS以后) .
该应用程序还包括在应用程序购买升级到完整版 . 这就是为什么定期显示表单以建议用户升级的原因 . 他们也可以选择稍后升级,这会导致此升级到完整版本表格消失,并使主要表单显示相机预览 .
然而,在真实设备上,有时升级到完整版本形式并没有完全消失,并且在主窗体上有回忆 . 在这种情况下,相机预览会显示在屏幕的一部分上,而应用程序按钮则不会显示 . 然而,如果用户触摸屏幕几秒钟后,主表单将完全显示并且升级表单的回忆消失 .
看起来在UI线程上可能有太多事情要做,但我只是在用户按下按钮关闭升级表单时调用 new MainForm(theme).show()
. 所以这应该可以,不应该吗?请注意,CN1模拟器不显示edt违规(但模拟器中没有相机预览) .
或者在将组件添加到布局后,是否必须在MainForm中调用revalidate()?我应该怎么做才能使这些回忆消失?
任何帮助真的很感激,
2 回答
这些东西总是难以跟踪,但我猜测对等组件在某种程度上与新表单发生冲突 .
确保你不要调用
postInvalidate
,除非你必须这样做,即便如此,你应该尽可能地限制和避免它,因为它可能与我们的绘图逻辑冲突 .另外,请确保您没有更改父表单的不透明度,例如如果您更改了表单UIID .
看起来已经找到了解决方案 . 事实上,我有一个原生方法初始化相机和surfaceview . 我在EDT上运行这个方法然后显示新的MainForm .
实际上我在
invokeAndBlock()
块中接受了初始化方法 . 现在看起来这种滞后远远不那么明显(我看不到它) . 在我自己的逻辑中,我可以解释它invokeAndBlock()
将在一个单独的线程上进行初始化工作,并且当它完全就绪时(因此可以显示相机和surfaceview),可以显示MainForm .这可能是@Shai的实际解决方案吗?