完整启动画面的 Lottie 动画不占用全屏

Posted

技术标签:

【中文标题】完整启动画面的 Lottie 动画不占用全屏【英文标题】:Lottie animation for full splash screen not taking full screen 【发布时间】:2020-12-24 21:30:36 【问题描述】:

我必须在 android 中使用 lottie 动画来制作启动画面。我已经使用 match parent 作为宽度和高度。但它向我展示了屏幕边缘的一些填充,如附图所示。如果我使用 scaletype 作为 fitXY 那么它的图像在某些设备上被拉伸。如何为所有设备分辨率使用 lottie 动画文件,或者我需要询问我们的设计师更改文件吗?

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:background="@color/retention_bg_welcome_color">

<com.airbnb.lottie.LottieAnimationView
    android:layout_
    android:layout_
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:lottie_autoPlay="true"
    app:lottie_fileName="test_lottie.json"
    android:adjustViewBounds="true"
    app:lottie_loop="true"
    app:lottie_speed="0.8" />
</androidx.constraintlayout.widget.ConstraintLayout>

【问题讨论】:

你为什么放 android:adjustViewBounds="true" ? 请尝试使用 lottie 视图而不是 layout_ 来放置 layout_ 和 layout_height。它应该强制约束布局计算正确的大小 @LenaBru 之前就是这样。高度/宽度均为 0dp。我改变了这些只是为了检查。有人提到在某处添加 android:adjustViewBounds="true"。仍然在边缘填充 您肯定填充来自 lottie 视图而不是 lottie 视图的父级?还是父母的父母? 是的,我确信当我尝试放置一些虚拟视图并为其添加颜色时。我在想我们是否需要对 json 文件进行一些更改。单个 json 文件会支持所有屏幕分辨率吗? 【参考方案1】:

android:scaleType="centerCrop" 为我解决了这个问题:

完整的 XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/home_splash"
android:layout_
android:layout_
android:fitsSystemWindows="true"
android:gravity="center_horizontal">

<com.airbnb.lottie.LottieAnimationView
    android:id="@+id/animation_view"
    android:layout_
    android:layout_
    android:duplicateParentState="true"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:lottie_autoPlay="true"
    app:lottie_fileName="test.json"
    app:lottie_loop="false"
    android:scaleType="centerCrop"
    tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>

【讨论】:

效果很好。谢谢。【参考方案2】:
  /**
   * Disable the extraScale mode in @link #draw(Canvas) function when scaleType is FitXY. It doesn't affect the rendering with other scaleTypes.
   *
   * <p>When there are 2 animation layout side by side, the default extra scale mode might leave 1 pixel not drawn between 2 animation, and
   * disabling the extraScale mode can fix this problem</p>
   *
   * <b>Attention:</b> Disable the extra scale mode can downgrade the performance and may lead to larger memory footprint. Please only disable this
   * mode when using animation with a reasonable dimension (smaller than screen size).
   *
   * @see LottieDrawable#drawWithNewAspectRatio(Canvas)
   */
  public void disableExtraScaleModeInFitXY() 
    lottieDrawable.disableExtraScaleModeInFitXY();
  

【讨论】:

为此我需要使用 scaleType 作为 fitXY。然后动画可能会在更高分辨率的设备上显示为拉伸。【参考方案3】:

在你的活动中使用它

requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
        WindowManager.LayoutParams.FLAG_FULLSCREEN);

【讨论】:

感谢您的回复。但这对我不起作用。【参考方案4】:

android:scaleType属性添加到com.airbnb.lottie.LottieAnimationView

<com.airbnb.lottie.LottieAnimationView
  android:id="@+id/lottieView"
  android:layout_
  android:layout_
  android:scaleType="centerCrop" // fitXY or centerCrop will resolve the aspect issue
  app:lottie_autoPlay="true"
  app:lottie_loop="false"
  app:lottie_rawRes="@raw/splash" />

【讨论】:

这只是重复 Carsten 5 月 26 日的回答。

以上是关于完整启动画面的 Lottie 动画不占用全屏的主要内容,如果未能解决你的问题,请参考以下文章

启动图像/启动画面的区别和需要哪一个?

在颤振应用程序中添加启动画面的正确方法是啥?

启动画面的延迟窗口

Lottie 动画里有图片怎么办?设计师小姐姐也能帮你减少开发量!

csharp 用于在Android上显示启动画面的代码

iOS:如何减小启动画面的图像大小