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

Как поменять два ListBoxItem’а между собой, используя анимацию?


Andrey Efimov

Вопрос

  • Модераторы
Опубликовано

Приветствую.

 

Задача такая:

Поменять местами два (любых) ListBoxItem’а используя при этом анимацию(AnimateFloat или другую). Т.е. добавить плавности смены.

 

Что нужно учитывать:

Каждый из Итемов, должен принимать новый Index. 

Пример:

У нас есть два Итема «ListBoxItem1(Index=0) и ListBoxItem2(Index=1)».

После обмена должно получиться «ListBoxItem2(Index=0) и ListBoxItem1(Index=1)».

Т.е. если мы меняем местами два листбокса, то меняем их полностью, учитывая индексы.

 

Что я пытался использовать:

  1. «FMX.ListBox.TCustomListBox.ItemsExchange», всё меняется, но нет анимации.
  2. Изменять Индекс у обоих Итемов вручную, но опять же нет анимации смены и как выяснил потом, это тот же принцип, что у первого пункта.
  3. Пытался менять Итемы с помощью «AnimateFloat» управляя свойством «Position.X и Position.Y», всё отлично, но, как и ожидалось, Итемы меняются только визуально.

По сути, мне необходимо создать эффект перетаскивания, который является неким подобием Drag and Drop.

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

  • 0
Опубликовано

А если воспользоваться сразу:

Пытался менять Итемы с помощью «AnimateFloat» управляя свойством «Position.X и Position.Y», всё отлично, но, как и ожидалось, Итемы меняются только визуально.

а потом:

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

(Ну или наоборот)

  • 0
  • Модераторы
Опубликовано

Нет, так не прокатывает, т.к. анимация начинает дёргаться. При ручной смене индекса, Итемы также меняют визуальное положение, просто без анимации. Т.е. Итем дважды пытается сменить свою позицию.

  • 0
  • Администраторы
Опубликовано
  • Вообще неправильно пытаться менять позицию итемов в TListBox, поскольку сам контрол TListBox отвечает за выравнивание и расстановку своих итемов. 
  • Вы же пытаетесь пойти против работы TListBox и по своему выравнивать итемы. В этом случае вам нужно создать наследника от TListBox и переопределить алгоритм выравнивания элементов.
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

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