Согните холст со многими UIComponents, если один перемещен, другие перерисованы / переработаны? - PullRequest
1 голос
/ 18 июля 2010

У меня есть холст, называемый Host, со многими UIComponents в качестве детей, иногда до 1000 или 3000 элементов.Пока это нормально, так как они не интерактивны.

Но я добавил «маркерную линию» (компонент пользовательского интерфейса шириной 1 пиксель с цветным фоном) на холст, который следует за движением мыши. Когда этот UIComponent добавляется к холсту хоста и перемещается, все замедляется до сканирования , т. Е. Для перемещения UIComponent требуется много времени.

Как вы думаете, что может быть причиной этого?или как избежать?

Ответы [ 2 ]

1 голос
/ 18 июля 2010

Каждый раз, когда вы перемещаете мышь, вы, вероятно, вызываете методы measure и updateDisplayList каждого из этих UIComponent s.Таким образом, вы, возможно, заставляете эти тысячи компонентов пересматривать свои позиции и измерения со своими соседями.

Не видя ваш код, я не могу быть слишком конкретным в рекомендации решения, но вы можете попробовать разместить Canvasс прозрачным фоном поверх холста, на котором размещены тысячи компонентов, соответствующих его размерам и местоположению, и используйте его для перемещения линии маркера.

0 голосов
/ 18 июля 2010

Я полагаю, что из 1000 предметов на экране одновременно отображается только небольшая часть?

Если у вас столько компонентов, ожидается замедление.Я предлагаю изучить использование класса ListBased.Поэтому отображаются только элементы на экране, и у вас не будет большого количества компонентов, торчащих в памяти.

...