当前位置: 首页 > 知识库问答 >
问题:

如何使用React Native将多个图片的帧显示为循环动画

晏正豪
2023-03-14

我有几个动画帧。我想在循环中显示动画。我读过:https://reactnative.dev/docs/animations https://reactnative.dev/docs/animated https://blog.bitsrc.io/making-animations-in-react-native-the-simplified-guide-6580f961f6e8我尝试实施:https://medium.com/react-native-training/react-native-animations-using-the-animated-api-ebe8e0669fae但它们都没有涵盖动画的多个帧以及如何使用简单的代码循环这些帧。我确信我需要做的是v简单,但这些教程已经结束了。

这是我正在使用的一些代码:就在渲染之前

Images: [
        { id: 1, src: './assets//frame1.png', title: 'foo', description: 'bar' },
        { id: 2, src: './assets//frame2.png', title: 'foo', description: 'bar' },
        { id: 3, src: './assets//frame3.png', title: 'foo', description: 'bar' },
        { id: 4, src: './assets//frame4.png', title: 'foo', description: 'bar' },
        { id: 5, src: './assets//frame32.png', title: 'foo', description: 'bar' },

      ]

render() {
const items = this.state.Images.map((item, key) =>
    <Image key={item.id}>{item.name}</Image>

...

<View>
  {items}
</View>

这不起作用-对象作为反应子对象无效...

我如何简单地首先显示该数组的第一个图像,然后让它在每个图像中循环(创建动画)。

任何人都可以提供一个简单的代码块来演示如何循环/循环几个。是否将资源文件夹中的png文件作为屏幕上的动画?

T

共有1个答案

曾洲
2023-03-14

你所需要的就是通过不透明度进行插值。

  • 只需像修改图像数组一样修改数据数组,并在动画视图中显示图像

遍历图像数组并设置不透明度值。

const data = ['red', 'green', 'blue', 'violet', 'pink', 'red'];
this.animations = new Animated.Value(0);
this.opacity = [];
data.map((item, index) => {
  this.opacity.push(
    this.animations.interpolate({
      inputRange: [index - 1, index, index + 1],
      outputRange: [0, 1, 0],
    }),
  );
});
  • 现在这个。不透明度数组将包含每个项目的相应不透明度值

现在开始循环。(在这里,我用2秒的时间将一个图像设置为另一个图像的动画)

Animated.loop(
  Animated.timing(this.animations, {
    toValue: length - 1,
    duration: 2000 * length,
    easing: Easing.linear,
    useNativeDriver: true,
  }),
).start();

为渲染内的每个项目设置不透明度

const opacity = this.opacity[index];
import React, {Component} from 'react';
import {View, StyleSheet, Animated, Easing} from 'react-native';

const data = ['red', 'green', 'blue', 'violet', 'pink', 'red'];

const length = data.length;

export default class App extends Component {
  constructor() {
    super();
    this.animations = new Animated.Value(0);
    this.opacity = [];
    data.map((item, index) => {
      this.opacity.push(
        this.animations.interpolate({
          inputRange: [index - 1, index, index + 1],
          outputRange: [0, 1, 0],
        }),
      );
    });
  }

  componentDidMount() {
    Animated.loop(
      Animated.timing(this.animations, {
        toValue: length - 1,
        duration: 2000 * length,
        easing: Easing.linear,
        useNativeDriver: true,
      }),
    ).start();
  }

  render() {
    return (
      <View style={styles.container}>
        {data.map((item, index) => {
          const opacity = this.opacity[index];
          return (
            <Animated.View
              style={[styles.item, {backgroundColor: item, opacity}]}
            />
          );
        })}
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    alignItems: 'center',
    justifyContent: 'center',
  },
  item: {
    height: 200,
    width: 200,
    position: 'absolute',
  },
});

希望对你有帮助。

 类似资料:
  • 我正在使用多索引数据框绘制折线图。使用Matplotlib绘制图形时,我可以看到正确的结果,但使用Plotly散点图绘制时,数据框显示错误的输出-为什么? 上面的代码绘制了正确的图表。下面的代码也会生成正确的结果。 但是我不知道如何同时在散点图中绘制蓝色和绿色? 例子: 谁能帮我把蓝色和绿色画在一起?

  • 数据帧: 我遵循了一个类似问题的解决方案:如何从for循环中构建和填充熊猫数据帧? 您可以看到这些值都是准确的,但是它返回了每个索引的整个值列表 此输出看起来正确,但正如您所看到的,只返回第一组

  • 我在一个CGdfs列表中有多个数据帧。 我想使用循环从所有这些数据帧中删除一个名为“情节”的列。我该怎么做呢? 我试过下面的方法,但不起作用

  • 问题内容: 感谢Jake Vanderplas,我知道如何开始使用来编写动画情节。这是一个示例代码: 假设现在我想绘制大量的功能(在这里说四个),这些功能是在循环的帮助下定义的。我做了一些voodoo编程,试图了解如何模仿下面的逗号,这就是我所得到的(不必说它不起作用:)。 我的问题是: 我该如何运作?红利(可能是关联的):和之间有什么区别? 谢谢 问题答案: 在下面的解决方案中,我展示了一个更大

  • 问题内容: 我正在运行python脚本,但不会显示图片。 我在该程序的目录中有一个apple.jpg图像,它应该显示图片,但没有。这是代码: 我的操作系统是Ubuntu,该程序只需完成就不会显示任何错误。 问题答案: 它适用于我在Ubuntu上。它使用Imagemagick显示图像。尝试这个:

  • 我有以下数据框,其中一列是对象(列表类型单元格): 我的预期产出是: 我应该怎么做才能做到这一点? 相关问题 熊猫:当单元格内容是列表时,为列表中的每个元素创建一行 很好的问题和答案,但只处理一列列表(在我的回答中,self-def函数将适用于多个列,而且接受的答案是使用最耗时的,这是不推荐的,请查看更多信息我应该在代码中何时使用pandas apply()