• 0
NesDmitrijj

AutoReverse [Отклонение] При использовании AutoReverse не восстанавливается значение свойства Inverse

Вопрос

Здравствуйте!

 

Как можно реализовать простой эффект плавного исчезновения текста (TLabel) с последующим его плавным появлением без глюков?

Пример:

  1. Кидаю на форму Label
  2. Создаю FloatAnimation для свойства Opacity
  3. У FloatAnimation делаю StartValue = 1, StopValue = 0
  4. Кидаю на форму кнопку и в OnClick пишу: FloatAnimation1.Start;
    Результат: При нажатии кнопки текст плавно исчезает и по завершению анимации текста не видно.
  5. У FloatAnimation делаю AutoReverse = true;

Результат: При нажатии кнопки текст плавно исчезает, а затем плавно появляется. По завершению анимации текст виден. Но при повторном нажатии всё начинает глючить.

 

Вопрос: как исправить?

Изменено пользователем Brovin Yaroslav

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

7 ответов на этот вопрос

  • 0

Такое ощущение, что это баг в FloatAnimation. Он не восстанавливает свойство Inverse в первоначальное состояние.

Если кинуть на форму вторую кнопку и в OnClick прописать FloatAnimation1.Inverse:=false; и нажимать её после завершения анимации, то повторный запуск анимации проходит без глюков. Замечу что в XE5 такого глюка небыло.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Тоже заметил подобное поведение.

Решение: прописать строку "FloatAnimation1.Inverse := false;" в OnFinish анимации 

Правильное решение ниже, дал Ярослав.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Исправлено в XE10.

 

Workaround для версий до XE8 (включительно)

Перед вызовом анимации сбросить Inverse в False.

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

Изменено пользователем Brovin Yaroslav
Добавлена информация для XE10
Andrey Efimov понравилось это

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Вообще-то, о том, что нужно каждый раз сбрасывать Inverse в False, я написал во втором посте. Проблема в том, что это очевидный баг. Раньше такого небыло.

Поделиться сообщением


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

  • Похожие публикации

    • Автор: Вячеслав
      Всем добрый день. Как правильно переопределить родителя для аниматора и тем самым использовать один аниматор для нескольких объектов?
      Пытаюсь реализовать следующий принцип: на форме несколько прямоугольников и один аниматор. При клике по конкретному прямоугольнику он начинает менять координату. Вот чаcть кода:
      procedure TForm2.MoveRect(Rect: TRectangle); begin //задаем родителя для аниматора Rect.AddObject(AniMoveRect); //Анимируем координату Y прямоугольника AniMoveRect.PropertyName:='Position.Y'; AniMoveRect.Inverse:=False; AniMoveRect.StopValue:=0; AniMoveRect.Start; end; procedure TForm2.RectangleClick(Sender: TObject); begin MoveRect(Sender as TRectangle); end; В итоге анимируется только один прямоугольник - тот, на который кликнули в первый раз. Не могу понять, в чем проблема.
      Данную тему читал, но в ней, насколько я понял, речь идет об одновременном использовании аниматора для двух объектов. 
      AniRects.zip
    • Автор: Garrincha
      Доброго времени суток.
      Требовалось в мой проект добавить немного анимации чтобы пользователи не скучали. По такому случаю решил использовать TFloatAnimation FireMonkey т.к. все говорили что это просто и очень красиво получается. Но возникла проблема с количеством кадров в секунду.
      Приведу конкретный пример.
      Нужно на OnMouseEnter чтобы кнопка увеличивалась по высоте в 2 раза (с 25 до 50). Так вот, если на свойство Height повесить TFloatAnimation то за 0,5 секунды картинка обновится
      на компе Celeron 2,2GHz 2Гб ОЗУ всего 2-3 раза 
      на компе Intel i3 2,53Ghz 4 Гб ОЗУ быстрее где-то раза в 3, но все равно не так плавно как хотелось бы.
      Но если я по-старинке напишу такой код на OnMouseEnter
      while but.Height < 50 do begin     but.Height := but.Height + 1;     Application.ProcessMessages;     sleep(5);   end; И аналогичное на OnMouseLeave то даже на первом менее мощном компьютере все очень быстро и красиво отрабатывает. Просто супер как отрабатывает.
      Это нормально для FireMonkey? Неужели все программируют под хорошие, относительно мощные компьютеры, а на старом железе нормальную анимацию на FireMonkey не написать?
      Все видео что я видел в интернете про анимацию в FireMonkey отличное, анимация правда хорошая. Это меня удивляет.
      Нигде не нашел информацию о том на какою дельту изменяется свойство объекта в TFloatAnimation и как определяется задержка между кадрами. Может при установке RAD?
      Может кто-то сталкивался и такой проблемой и решил ее?
       
      Заранее благодарен.
       
    • Автор: estra

       
      Редактирую стиль, добавляю к нему компонент TImage и для свойства RotateAngle создаю FloatAnimation (параметры анимации на скрине). Но при запуске никакой анимации нет. Почему? И как все же добиться работоспособности анимации для элемента стиля?
    • Автор: Вячеслав
      Добрый день! Хочу заанимировать Lable таким образом, чтобы параметр Scale.X линейно увеличивался. Но при этом необходимо, чтобы центр компонента оставался на своем месте. А параметр Scale.X за начало отсчета принимает верхний левый угол лейбла. Есть ли возможность изменить центр масштабирования компонента? Я данную задачу уже решил путем добавления анимации смещения влево, но этот способ мне кажется топорным и неоптимальным.
    • Автор: antarey
      Придумал как реализовать эфект Анимация смены TabItem в TabControl , но есть вопрос - можно ли для двух объектов использовать один TFloatAnimation? или реализовывать через TTimer?
    • Автор: Egorius
      Как запустить анимацию с кнопки для другого компонента?

      К примеру с Button  кликом запустить анимация для вызова например анимированного объекта Panel?
    • Автор: krapotkin
      TFloatAnimation использует ProcessMessages 
       
      Это чревато возникновением всяких событий, и даже закрытию формы во время анимации, что приводит к AV
      очень хочется иметь Repaint без ProcessMessages.
      Это возможно?
    • Автор: 97mik
      Как сделать эффект вспышки? То есть чтобы например Panel переходила из Opasity=0 в Opasity=1 и потом обратно, за 500мс..
    • Автор: 97mik
      В системе iOS есть несколько вариантов анимации выдвижных панелей, и вот один из них это когда панель выходит снизу экрана, как это можно сделать?
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу