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

失败的道具类型:提供给RCTView的对象类型的无效道具不透明度

柳俊彦
2023-03-14

下面是React Native教程:https://facebook.github.io/react-native/docs/animated.html

但是,当我运行代码时,我得到了以下警告:失败的道具类型:无效的道具opacity类型object提供给RCTView

而组件只是消失时,没有动画淡出()得到调用。

下面是一个示例代码:

import React, { Component } from 'react';
import {
  AppRegistry,
  Text,
  View,
  Animated,
  StyleSheet
} from 'react-native';

import Icon from 'react-native-vector-icon/FontAwesome'

export default class Sample extends Component {
  state = {
    fadeAnim: new Animated.Value(0),
  }
  fade() {
    Animated.timing(                  // Animate over time
      this.state.fadeAnim,            // The animated value to drive
      {
        toValue: 1,                   // Animate to opacity: 1 (opaque)
        duration: 10000,              // Make it take a while
      }
    ).start();                        // Starts the animation
  }
  render() {
    let { fadeAnim } = this.state;

    return (
      <View style={styles.container}>
        <TouchableHighlight onPress={() => {this.fade()}}>
          <Icon name="circle" size={30} color="#fff" style={{opacity: fadeAnim}}
          >
        </TouchableHighlight>
      </View>
    );
  }
......
}

共有3个答案

穆阳嘉
2023-03-14

您的代码中有一个问题:

图标标签不能在动画中使用,因此请回应本地投诉。

相反,您应该使用以下选项之一来包装图标:TouchableHighlight、TouchableNativeFeedback、TouchableOpacity、TouchableWithoutFeedback,无论哪个选项有效。

https://facebook.github.io/react-native/docs/touchablewithoutfeedback.html

并将属性绑定到Touchable*而不是Icon。

符学
2023-03-14

尝试使用背景颜色的alpha值来代替不透明度。

...
let faceRgb = 'rgba(0,0,0,' + faceAnim + ' )';

return (
  ...
  <Icon name="circle" size={30} color="#fff" style={{backgroundColor: faceRgb}} />
  ...
)

朱毅
2023-03-14

您应该将视图更改为动画。查看。然后,您可以选择添加fadeAnim的内插值,以获得更细粒度的控件。

像这样的东西应该有用。。。

render() {
    const { fadeAnim } = this.state;

    // optionally tweak the input / output range to suit your needs
    const opacity = fadeAnim.interpolate({
      inputRange: [0, 1],
      outputRange: [0, 1]
    });

    return (
      <Animated.View style={[styles.container, opacity]}>
        <TouchableHighlight onPress={() => {this.fade()}}>
          <Icon name="circle" size={30} color="#fff"
          >
        </TouchableHighlight>
      </Animated.View>
    );
  }

您可能不想淡入容器视图,在这种情况下,请移动动画。在触摸屏内部查看。

 类似资料: