Перейти к содержанию
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 пользователей онлайн

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