UI

Android Lottie基础使用

2020-12-05  本文已影响0人  Coair_Scarlet

其他动画方案

  1. 手工制作动画。在Android和iOS上,手工制作动画是设计和工程设计的巨大时间投入。通常很难甚至不可能证明花这么多时间来制作动画是正确的。

  2. GIF。Gif的大小是bodymovin JSON的两倍以上,并且以固定大小呈现,无法放大以匹配大型和高密度屏幕。

  3. Png序列。Png序列甚至比gif更糟糕,因为它们的文件大小通常是bodymovin json大小的30-50倍,并且也无法放大。

  4. 可绘制矢量动画(仅适用于Android)。性能更高,因为它在RenderThread而不是主线程上运行。仅支持Lottie功能的子集。无法手动设置进度。不支持文字或动态颜色。无法以编程方式或通过互联网加载。

导入项目

dependencies {
    ...
    implementation "com.airbnb.android:lottie:$lottieVersion"
    ...
}

获取一个json动画,lottie_clickable_rainbow.json
放到raw中,如果没有raw文件夹,在res下新建一个
在layout中导入

<com.airbnb.lottie.LottieAnimationView
    android:id="@+id/demo_lottie"
    android:layout_width="100dp"
    android:layout_height="100dp"
    ...
    app:lottie_autoPlay="true"
    app:lottie_loop="true"
    app:lottie_rawRes="@raw/lottie_check_mark_yes" />

在代码中可以进行控制:

bind.apply {
    demoLottieResumeButton.setOnClickListener {
        //恢复暂停的动画
        demoLottieView.resumeAnimation()
    }
    demoLottiePauseButton.setOnClickListener {
        //暂停动画
        demoLottieView.pauseAnimation()
    }
    //获取当前动画进度0F..1F
    demoLottieView.addAnimatorUpdateListener {
        demoLottieSlider.value = it.animatedFraction
    }
    demoLottieSlider.addOnSliderTouchListener(object : Slider.OnSliderTouchListener {
        override fun onStartTrackingTouch(slider: Slider) {
            demoLottieView.pauseAnimation()
        }
        override fun onStopTrackingTouch(slider: Slider) {
            demoLottieView.resumeAnimation()
        }
    })
    demoLottieSlider.addOnChangeListener { slider, value, fromUser ->
        if (fromUser){
            //设置当前动画进度0F..1F
            demoLottieView.progress = slider.value
        }
    }
}
上一篇下一篇

猜你喜欢

热点阅读