lottieAnimationVIew = findViewById(R.id.animationView);
lottieAnimationView.addLottieOnCompositionLoadedListener(new LottieOnCompositionLoadedListener() {
@Override
public void onCompositionLoaded(LottieComposition composition) {
mKeyPath = getKeyPath(); // This is your own method for getting the KeyPath you desire. More on that below.
mCallback = new LottieValueCallback<>();
mCallback.setValue(Color.RED);
checkBox.addValueCallback(mKeyPath, LottieProperty.COLOR, mCallback);
}
});
/**sets tint for the animation.
* @itemsToTint the items elements ("nm" inside "layers") the animation to tint.
* null will reset all tinting. Empty will set tint for all. */
fun LottieAnimationView.setAnimationTint(itemsToTint: Array<String>?, @ColorInt color: Int) {
//based on https://stackoverflow.com/a/45607292/878126 https://airbnb.io/lottie/#/android?id=dynamic-properties https://github.com/SolveSoul/lottie-android-colorfilter-sample
if (itemsToTint == null) {
//un-tint
addValueCallback(KeyPath("**"), LottieProperty.COLOR_FILTER) { null }
return
}
addValueCallback(
KeyPath(*itemsToTint,"**" ),
LottieProperty.COLOR_FILTER
) { PorterDuffColorFilter(color, PorterDuff.Mode.SRC_ATOP) }
}
3条答案
按热度按时间5jdjgkvh1#
在这个例子中,假设我想将一个特定的图层重新着色为Color.RED。
您需要LottieAnimationView、KeyPath和LottieValueCallback
然后在onCreate(或onViewCreated)中,您将获得带有findViewById的动画,以及lottieAnimationView的“addLottieOnCompositionLoadedListener”,其中您将设置“mKeyPath”和“mCallback”:
参数“LottieProperty.COLOR”指定了要更改的属性。
可能有更好的方法来做到这一点,但这里是我的“getKeyPath”方法,用于查找我想要更改的特定内容。它将记录每个KeyPath,以便您可以看到您想要的内容。然后,一旦您提供了正确的索引,它就会返回它。我看到我想要的内容是列表中的第5个,因此硬编码索引为4。
请注意,“Fill”,“Ellipse 1”,“Fill 1”是我提供的字符串,用于将列表缩小到仅具有这些键的那些,因为我知道我想要的层将在这些层中。可能还有更好的方法来做到这一点。
zf9nrax12#
关于这个主题还有另一个线程,它采用了相同的方法,但有点简化:How to add a color overlay to an animation in Lottie?
下面是一个例子(Kotlin):
您还可以在Lottie编辑器中找到关键路径的名称。
jv4diomz3#
以下是一个Kotlin解决方案,适用于您可能需要的所有情况: