Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как программно добавить анимацию к TListBoxItem


Kikoma

Вопрос

К программно созданному кастомизированному TListBoxItem при удалении (здесь обсуждается как удаляем) хочу добавить Анимацию:

Сначала Opacity с 1 до 0, потом Height с текущего значения до 0.

 

Через дизайн форму и инспектор объектов проблем нет, а программно? Ведь эти TListBoxItem-ы тоже программно создаются.

 

 

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
TListBoxItem(ваш_item).Animate('Opacity', 0, 0.5);
TListBoxItem(ваш_item).AnimateWait('Height', 0, 0.5);

и только после этого удаляйте.

Но здесь может возникнуть ряд проблем.

  1. Во-первых - оптимально делать синхронизацию.
  2. Во-вторых - ввиду "ряда особенностей" FMX все может работать на Windows 8, но не будет работать (или будет, но с ошибками) на Windows 7. А на Windows XP вообще может себя повести в "3-ем варианте"... ) Более стабильно будет работать на Маке и на Android )))

Вот такие чудеса могут быть.

 

Чтобы всего этого избежать, Вам нужно точно определить ту последовательность, которую Вы хотите воспроизвести и сделать синхронизацию.

 

Например, как писал выше:

TListBoxItem(ваш_item).Animate('Opacity', 0, 0.5);
TListBoxItem(ваш_item).AnimateWait('Height', 0, 0.5);
// тогда Animate для 'Opacity' и 'Height' выполнится параллельно
// а вот следующая процедура выполнится только после окончания AnimateWait 'Height'
TThread.Synchronize(TThread.CurrentThread, тут_ваша_процера_удаления_item);

Думаю, что корректно описал - как. Но было бы более точно и правильно, если бы на ваш вопрос ответил непосредственно Ярослав Бровин. Он все-таки более компетентен.

Изменено пользователем Brovin Yaroslav
Отформатировал код
Ссылка на комментарий
  • 0

Спасибо, AlexG

 

Opacity - работает.

Height - не работает. Не уверен, но думаю из-за стилизации (попозже попробую на не стилизованном TlistBoxItem, результат опишу)

 

При удалении вызывается ошибка. Подробности Как правильно программно удалить TListBoxItem из стилевого объекта?

Ссылка на комментарий
  • 0

"Height - не работает"

а в Вашем TListBox, в котором Вы меняете Item'ы, свойство ItemHeight случаем <> 0 ?

В смысле - если ItemHeight <> 0, то изменение свойства Height для любого TListBoxItem работать не будет

 

P.S. Вот простой пример, который только-что опробовал и он прекрасно работает именно так, как Вам нужно

(удаляет выбранный элемент списка с анимацией)

...
TListBoxItem(TListBox(Sender).Selected).AnimateFloat('Opacity', 0, 0.3);
TListBoxItem(TListBox(Sender).Selected).AnimateFloatWait('Height', 0, 0.3);
TListBox(Sender).Items.Delete(TListBox(Sender).Selected.Index);
...

P.P.S. проверил - все работает и на Windows и на Android. корректно и с анимацией

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...