• 0
yura371

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

Вопрос

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

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

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

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


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

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

  • 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

FrameRate - это кадров в секунду, следовательно
1000/FR это кол-во миллисекунд на кадр
x/10*10 это просто округление

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


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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 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 нельзя умравлять)) буду в любом случае пробовать его. Спасибо.

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


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

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Сейчас на странице   0 пользователей

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