dialog.dispose()导致屏幕在Android上闪烁

时间:2019-05-01 10:44:29

标签: android codenameone

在Android上dialog.dispose()之后,我出现了屏幕闪烁的问题(在iOS上没有)

以下是视频(请观看480p,因为YouTube会以较低的分辨率丢帧) https://www.youtube.com/watch?v=YExvPno3hjc

这是Dialog的代码

Dialog dialog = new Dialog("Shop");
TableLayout dialogLayout = new TableLayout(buttons.length, 4);

dialog.setName("ShopDialog");
dialog.setLayout(dialogLayout);
dialog.setDisposeWhenPointerOutOfBounds(true);

然后,TableLayout中充满了标签和按钮,包括“关闭”按钮

Button.setCapsTextDefault(false);
Button closeButton = new Button ("Close");
closeButton.getAllStyles().setFgColor(WordsSynonyms.UI_TEXT_COLOR);
closeButton.getAllStyles().setBgImage(theme.getImage("button.png"));
closeButton.addActionListener(new ActionListener<ActionEvent>() {
    @Override
    public void actionPerformed(ActionEvent evt) {
        dialog.dispose();               
    }
});         
Button.setCapsTextDefault(true);

最后像这样显示

dialog.showPacked(BorderLayout.CENTER, true);

问题是,如果我点击“关闭”按钮,整个屏幕都会闪烁, 看起来很简短,黑色的矩形覆盖了Form, 但是如果您不在对话框中点击就不会发生,它会正常消失

我尝试将“表格色调”更改为白色setTintColor(0x3fffffff),以检查它是否与该色调有关,但是看起来与它无关,尽管“表格色调”设置为25%,但仍有黑色闪烁白色

这发生在三种不同的窗体上,具有不同的对话框,所以应该更一般一些,以前不一样,但是我在全局一级所做的唯一更改是针对iOS的构建提示,对Android有影响

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

这可能是后台表单的性能问题或违反EDT。在Android中,我们异步绘制屏幕,​​如果错过一帧,可能会发生这种情况。您可以通过使用主题常量删除对话框过渡来减轻问题:

dialogTransitionIn=empty
dialogTransitionOut=empty

但这可能是由于表单中的元素花费太长时间来绘制所致。在模拟器中打开表单,并将其填写到显示问题的级别(无需打开对话框)。然后在性能监视器工具中刷新树并检查绘制表单所需的绘画操作。看看有没有什么特别贵的。