如何将 ColorFilter 与 React-Native-Lottie 一起使用?

Har*_*eld 5 react-native bodymovin expo lottie

我似乎无法让 colorFilter 属性与我的 .json 文件一起使用。没有错误,但颜色显然没有改变。

<LottieView
     style={{
         width: 90,
         height: 90,
     }}
     colorFilters={
       [
         {
         keypath: "asdf",
         color: "#abcdef",
         }
       ]
     }
     source={badge.icon}
     loop={false}
/>
Run Code Online (Sandbox Code Playgroud)

我正在使用 BodyMovin 从 After Effects 导入 .json,但我是否正确更改了图层名称?如果不是的话,这到底为什么不起作用? 在此输入图像描述

red*_*red 6

我无法让 colorFilters 工作,但您可以尝试执行以下操作:


import myAnimation from "./../img/myAnimation.json";

Run Code Online (Sandbox Code Playgroud)

在渲染部分使用 LottieView 进行导入,而不是使用 require 内联

<LottieView        
  //source={require("./../img/radius.json")}
  source={myAnimation}
/>

Run Code Online (Sandbox Code Playgroud)

现在你可以直接从json对象操作属性,例如这里我根据实际颜色(从黑到白或从白到黑)来操作颜色

myAnimation.layers[1].shapes[0].it[1].c.k = myAnimation.layers[1].shapes[0].it[1].c.k[0] == 0 ?  [1,1,1,1] : [0,0,0,1];
Run Code Online (Sandbox Code Playgroud)

要找出您需要的属性是什么,请检查 json,它不是很清楚,但经过一些尝试和错误您可以理解其结构。

  • 不幸的是我认为这就是方法。所以我做了一个工具来帮助 - https://colorize-react-native-lottie.netlify.app/ (4认同)

Fré*_*Wat 6

只需尝试使用 React Native,它对我来说效果很好

    <LottieView
                style={style.heartLootie}
                source={require("../../assets/animations/favorite_animation.json")}
                progress={animationProgress}
                colorFilters={[
                    { keypath: "Red Heart", color: themeColors.PRIMARY },
                    { keypath: "Grey Heart", color: themeColors.SECONDARY },
                ]}
            />
Run Code Online (Sandbox Code Playgroud)

  • 啊哈,我明白了,在 json 文件中有一个图层数组,在其中您可以看到属性名称“nm”,因此我们可以通过其名称更改图层的颜色。 (5认同)