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

Тормозит анимация


yura371

Вопрос

Здравствуйте. С помощью темы http://delphifmandroid.blogspot.ru/2013/10/blog-post_28.html я сделал выдвижное меню.

У меня вопрос: Из-за чего может тормозить FloatAnimation1 при "скрытии" выдвижного меню? При анимации "открытия" всё нормально.

Изменено пользователем yura371
Ссылка на комментарий

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

  • 0

Поиграйтесь с настройками типа анимации, если не ошибаюсь, In, Out, InOut. Ну и еще крайне важно не слишком сильно забивать приложение всяческими свистоперделками, эффектами, которые нагружают основной поток при отрисовке. Можно также FrameRate изменить, но мне это в свое время не помогло.

А вообще FM, к сожалению, хреново оптимизирована под подобные задачи. Особенно удручает тот факт, что все визуальные компоненты всегда отрисовываются, независимо от того, находятся ли они поверх остальных или перекрыты. Поэтому старайтесь сперва делать в интерфейсе минимум, а потом уже расширяйтесь.

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

Можно ли изменить количество кадров в исходниках TFloatAnimation? А то анимация настолько пошагово выполняется, не чувствуется плавности. Кто как решает эту проблему? В основном я пользуюсь параметрами Opacity и Position. 

XE10, Android

Изменено пользователем zekelive
Ссылка на комментарий
  • 1

Нашел в исходниках:

DefaultAniFrameRate = 60;

Видимо количество кадров в минуту

И такие процедуры:

constructor TAniThread.Create;
begin
  inherited Create(nil);
  if not TPlatformServices.Current.SupportsPlatformService(IFMXTimerService, FTimerService) then
    raise EUnsupportedPlatformService.Create('IFMXTimerService');
  if TAnimation.AniFrameRate < 5 then
    TAnimation.AniFrameRate := 5;
  if TAnimation.AniFrameRate > 100 then
    TAnimation.AniFrameRate := 100;
  Interval := Trunc(1000 / TAnimation.AniFrameRate / 10) * 10;
  if (Interval <= 0) then Interval := 1;

  OnTimer := DoSyncTimer;
  FAniList := TList<TAnimation>.Create;
  FTime := FTimerService.GetTick;

  Enabled := False;
end;

И вот это:

procedure TAniThread.DoSyncTimer(Sender: TObject);
begin
  OneStep;
  if TAnimation.AniFrameRate < 5 then
    TAnimation.AniFrameRate := 5;
  Interval := Trunc(1000 / TAnimation.AniFrameRate / 10) * 10;
  if (Interval <= 0) then Interval := 1;
end;

Судя по коду, кадров не может быть больше 100 и меньше 5. И самое главное, это расчетная формула интервала

Interval := Trunc(1000 / TAnimation.AniFrameRate / 10) * 10;

Что это вообще такое? 1000, 10 - откуда эти значения и для чего они нужны?

 

Ссылка на комментарий
  • 0
44 минуты назад, krapotkin сказал:

если вам надо анимировать слайд тяжелой страницы, сделайте скриншот, прокрутите его,  а страницу нарисуйте уже в конечном варианте

На самом деле все достаточно просто. Есть Trectangle который изменяет свою позицию. На rectangle лежит label. Получается плавно выезжающая снизу панелька. Но даже эта банальная вещь тормозит. Пытался его даже из отдельного потока запустить - результат одинаков. Как с этим бороться - не понимаю. 

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

на чем тормозит?

у меня телефон не тормозит со слайдингом tabControl, ноут не тормозит

правда не Celeron/Atom

если мы используем TAnimator, то и так отдельный поток создается

Ссылка на комментарий
  • 0
2 минуты назад, krapotkin сказал:

на чем тормозит?

у меня телефон не тормозит со слайдингом tabControl, ноут не тормозит

правда не Celeron/Atom

если мы используем TAnimator, то и так отдельный поток создается

Со слайдингом TabControl у меня тоже не тормозит. Аппарат Samsung Galaxy S4. Android 5.0.1. Как думаете может помочь в моей проблеме компонент Ярослава из набора FGX. FgxPosition если я не ошибаюсь?

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

выдвижное меню - это TMultiView ?

может, проще его и использовать тогда? у меня нигде не затыкалось, тем более на 8-ядерном 1600 Mhz

вообще, тормоз - это всегда перерисовка чего-то или скачивание в главном потоке...

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

FgxPosition - частично поможет, так как он по сути один аниматор, а не два. Но если вы меняете только одну составляющую позиции компонента: x или y, то разницы не будет

Ссылка на комментарий
  • 0
2 часа назад, krapotkin сказал:

выдвижное меню - это TMultiView ?

может, проще его и использовать тогда? у меня нигде не затыкалось, тем более на 8-ядерном 1600 Mhz

вообще, тормоз - это всегда перерисовка чего-то или скачивание в главном потоке...

Не совсем так. Не выдвижнок меню, а панель с информацией.

Ссылка на комментарий
  • 0
1 час назад, Brovin Yaroslav сказал:

FgxPosition - частично поможет, так как он по сути один аниматор, а не два. Но если вы меняете только одну составляющую позиции компонента: x или y, то разницы не будет

У меня как раз меняется положение у и opacity. Но я думаю, что свойством opacity, компонентом fgxposition нельзя умравлять)) буду в любом случае пробовать его. Спасибо.

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

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