dialog.dispose () вызывает мерцание экрана на Android - PullRequest
1 голос
/ 01 мая 2019

У меня проблема с мерцанием экрана после dialog.dispose() на Android (этого не происходит на 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);

Проблема в том, что если я нажимаю кнопку «Закрыть», весь экран мерцает, это выглядит как очень короткое появление черного прямоугольника, который покрывает форму, но это не произойдет, если вы нажметедиалогового окна, оно обычно исчезает

Я пытался изменить оттенок формы на белый setTintColor(0x3fffffff), чтобы проверить, связано ли это с оттенком, но похоже, что нет, все еще мерцают черные цвета, хотяОттенок формы установлен на 25% белого

Это происходит на трех разных формах с разными диалогами, так что это должно быть что-то более общее, раньше это было не так, но единственное, что я имеюНа глобальном уровне изменились подсказки по сборке для iOS, которые не должны влиять на Android

Есть идеи?

1 Ответ

1 голос
/ 02 мая 2019

Это может быть проблема производительности с фоновой формой или нарушение EDT. В Android мы рисуем экран асинхронно, и если мы пропустим кадр, это может произойти. Возможно, вам удастся решить проблему, удалив диалоговые переходы с помощью констант темы:

dialogTransitionIn=empty
dialogTransitionOut=empty

Но это может быть вызвано тем, что рисование элемента формы занимает слишком много времени. Откройте форму в симуляторе и заполните ее до уровня, который показывает проблему (не открывая диалоговое окно). Затем в инструменте мониторинга производительности обновите дерево и проверьте операции рисования, необходимые для рисования формы. Посмотрите, стоит ли что-то дорогое.

...