Лотти анимация медленный android

Я использую новую библиотеку Airbnb,Лотти чтобы сделать анимацию в моем приложении.

анимация состоит из файла JSON 70 КБ и папки изображений 328 КБ. В этой папке 13 маленьких png.

следуя указаниям репозитория GitHub, я заявляю свое мнение следующим образом

    <com.airbnb.lottie.LottieAnimationView
    android:id="@+id/lottie_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:lottie_fileName="animation.json"
    android:layout_gravity="bottom"
    app:lottie_loop="false"
    app:lottie_autoPlay="true"/>

и затем, в соответствующем классе java я вызываю:

        mLottieView.setImageAssetsFolder("images");

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

не могли бы вы сказать мне, если есть способ решить эту проблему?

спасибо

3 ответов


на документация упоминает несколько элементов, которые влияют на производительность

  • если композиция не имеет масок или матов, то производительность и накладные расходы памяти должны быть довольно хорошими

  • последовательности Png еще хуже, чем gifs (из-за размеров файлов)

есть также некоторые общие Android / мобильные проблемы, чтобы рассмотреть:

  • С width="match_parent", height="wrap_content" комбинация, изображения будут масштабироваться. Используйте wrap, wrap или фиксированный размер.
  • Alpha на PNGs добавляет дополнительные накладные расходы на обработку

если ваш поток пользовательского интерфейса делает слишком много работы, как вы предлагаете, можно отложить запуск анимации? Если это вариант, то LottieComposition имеет статические методы, такие как LottieComposition.fromJson().

вы можете вручную настроить свои композиции в фоновом потоке (а затем дополнительно LottieDrawable и установить композицию). После этого вы можете переключиться на поток пользовательского интерфейса и setComposition (или setImageDrawable) на LottieAnimationView


Я решил эту проблему, используя эти две строки кодов

  final LottieAnimationView animationView = (LottieAnimationView) findViewById(R.id.animation_view);
  animationView.useExperimentalHardwareAcceleration(true);
  animationView.enableMergePathsForKitKatAndAbove(true);

Что касается ваших" маленьких изображений " и проблемы потребления памяти, я уже отвечал на довольно похожий вопрос:

огромный всплеск потребления памяти при использовании png с большим количеством прозрачной области

Не путайте папку 328kb изображений. В памяти эти образы займут гораздо больше места. И именно по этой причине у вас есть скачок потребления памяти.

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