标签: react-animated

反应本机“尝试将值设置为不可变对象”

我正在创建一个可拖动的框。我可以将其拖动到屏幕上的任何位置,但我收到此错误,其中显示“您试图在一个本应不可变且已被冻结的对象上设置密钥_value”。谁能告诉我我做错了什么。

我的代码:

import React, { Component } from 'react'
import {
  AppRegistry,
  StyleSheet,
  Text,
  Button,
  ScrollView,
  Dimensions,
  PanResponder,
  Animated,
  View
} from 'react-native'

import { StackNavigator } from 'react-navigation'




export default class Home extends Component{

componentWillMount(){

  this.animatedValue = new Animated.ValueXY();

this.panResponder = PanResponder.create({

 onStartShouldSetPanResponder: (evt, gestureState) => true,
  onMoveShouldSetPanResponder: (evt, gestureState) => true,
  onPanResponderGrant: (e, gestureState) => {



      },

  onPanResponderMove:Animated.event([


null,{dx: this.animatedValue.x , dy:this.animatedValue.y}

    ]),  
  onPanResponderRelease: (e, gestureState) => { 
      },       
})
}

  render(){

    const animatedStyle …
Run Code Online (Sandbox Code Playgroud)

javascript android reactjs react-native react-animated

4
推荐指数
1
解决办法
2709
查看次数

父边界内的可拖动视图

我面临的任务是要在背景图像上放置可拖动标记,然后在背景图像中获取标记的坐标。

我已经按照这个整齐的教程,使用拖动的标记Animated.ImagePanResponderAnimated.ValueXY。问题是我无法弄清楚如何将可拖动视图限制为仅在其父视图(背景图像)的边界内移动。

很感谢任何形式的帮助 :)

最好的问候
詹斯

animation react-native react-animated

4
推荐指数
2
解决办法
2900
查看次数

将多个视图的原生动画作为圆圈进行反应

我想要2个视图,它们像一个圆圈一样变换,同时没有旋转.第一个视图从顶部开始,第二个视图从底部开始.我已经问过如何用一个视图做到这一点.我不认为它运行两个视图. 之前的问题

在此输入图像描述

//import liraries
import React, { Component } from 'react';
import { View, Text, StyleSheet, Animated, Button, TouchableOpacity } from 'react-native';

// create a component
export default class App extends Component {
  constructor() {
      super()
      this.animated = new Animated.Value(0);
      this.animated2 = new Animated.Value(0);

      var range = 1, snapshot = 50, radius = 100;
      /// translateX
      var inputRange = []
      var outputRange = [] 
      var outputRange2 = []
      for (var i=0; i<=snapshot; ++i) {
          var value = i/snapshot;
          var move …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs react-native react-animated

4
推荐指数
1
解决办法
1515
查看次数

onScroll 不是 useNatveDriver 和 ScrollView 的函数错误

我想在我的应用程序中添加可折叠标题。我为标题视图创建了一个单独的组件。

interface Props{
    userData: UserDetails | null
    scrollY: Animated.Value
}
    
const HEADER_EXPANDED_HEIGHT = sizeProportionHeight(320)
const HEADER_COLLAPSED_HEIGHT = sizeProportionHeight(142)

const CollapsableHeader : React.FC<Props> = ({userData, scrollY}) => {
    
   const headerHeight = scrollY.interpolate({
        inputRange: [0, HEADER_EXPANDED_HEIGHT-HEADER_COLLAPSED_HEIGHT],
        outputRange: [HEADER_EXPANDED_HEIGHT, HEADER_COLLAPSED_HEIGHT],
        extrapolate: 'clamp'
    })

    return(
        <Animated.View style={{height: headerHeight, width: SCREEN_WIDTH, position:'absolute', top:0, left: 0}}/>
    )
}

export default CollapsableHeader
Run Code Online (Sandbox Code Playgroud)

我的主页我添加了标题,如下所示:

interface Props{
    navigation: StackNavigationProp<MainParamList,'HomeScreen'>
    route: RouteProp<MainParamList,'HomeScreen'>
}

interface HeaderState {
    scrollY: Animated.Value   
}

interface HomeScreenState {
    header: HeaderState
}

const HomeScreen : React.FC<Props> = …
Run Code Online (Sandbox Code Playgroud)

react-native react-native-scrollview react-animated react-native-animatable react-typescript

4
推荐指数
1
解决办法
2832
查看次数

React Native:如何为特定组件设置动画?

我在做一个测验。并且所有选项都将在 for 循环中呈现。

预期行为:

当我点击一个选项时,如果它是错误的答案,那么它应该将背景颜色更改为红色并且它应该抖动。

下面是我正在尝试的代码。

import React, { Component } from "react";
import {
  View,
  Text,
  TouchableWithoutFeedback,
  Animated,
  Easing
} from "react-native";

class MCQOptions extends Component {
  state = {
    optionSelectedStatus: 0 // 0: unselected, 1: correct, -1: wrong
  };
  constructor() {
    super();
    this.animatedValue = new Animated.Value(0);
    this.shakeAnimValue = new Animated.Value(0);
  }

  onOptionSelected(i) {

    // this.props.showNextQuestion();

    var answer = this.props.answer;
    if (answer == i) {
      this.setState({ optionSelectedStatus: 1 });
      this.showCorrectAnimation();
    } else {
      this.setState({ optionSelectedStatus: -1 });
      this.showErrorAnimation();
    } …
Run Code Online (Sandbox Code Playgroud)

reactjs react-native react-animated

3
推荐指数
1
解决办法
4239
查看次数

React Native Animated 基于多个值插入不透明度

我有一个 React Native Animated.view 组件,我想根据滚动视图位置对其不透明度进行插值。但是,我想使用两个值(x 和 y)而不是一个值来插值不透明度。

      <Animated.View
        style={[
          {
            opacity: this.state.scrollX.interpolate({
              inputRange: [0, 414, 828],
              outputRange: [0, 1, 1]
            })
          },
          {
            opacity: this.state.scrollY.interpolate({
              inputRange: [-168, -167, -166, -85, -84],
              outputRange: [1, 1, 1, 0, 0]
            })
          }
        ]}
      >
        <Text>Content....</Text>
      </Animated.View>
Run Code Online (Sandbox Code Playgroud)

这当然不起作用,因为一个不透明度值会覆盖另一个不透明度值,但它清楚地表明了我想要实现的目标。

css animation react-native react-animated

3
推荐指数
1
解决办法
5262
查看次数

我应该在卸载时明确停止 React Native 动画吗?

假设我用 开始动画Animated.timing().start(),具体时间(在安装上或在某些外部事件上)并不重要。然后我使用 anAnimated.View来渲染动画。

假设它在组件卸载之前没有完成。

我应该在stop()卸载时显式调用动画(实际上,所有仍然可以运行的动画),还是会隐式清理它?大多数手动分配的资源不会被隐式释放(除非它们附加到组件,如钩子),但动画似乎会这样做。

react-native react-animated

3
推荐指数
1
解决办法
2087
查看次数

用动画缩放反应原生按钮

我正在创建一个可触摸的按钮,以对原生动画做出反应。当按下按钮时,它应该缩小一点。当压力释放后,它应该会恢复正常。

这是我的代码:

export const TouchableButton = (props) => {

    const { onPress, text, icon } = props

    const animatedValue = new Animated.Value(0)

    const animatedValueInterpolateScale = animatedValue.interpolate({
        inputRange: [0, 1],
        outputRange: [1, 0.95]
    })

    const pressInHandler = () => {
        Animated.timing(
            animatedValue,
            {
                toValue: 1,
                duration: 150
            }
        ).start()
    }

    const pressOutHandler = () => {
        Animated.timing(
            animatedValue,
            {
                toValue: 0,
                duration: 150
            }
        ).start()
    }

return (
    <TouchableWithoutFeedback onPress={onPress} onPressIn={pressInHandler} onPressOut={pressOutHandler}>
        <View style={{ alignItems: 'center' }}>
            <Animated.View style={{ width: '100%', …
Run Code Online (Sandbox Code Playgroud)

react-native react-animated

3
推荐指数
1
解决办法
2206
查看次数

为什么只有一个 React Native 并行动画在运行,而另一个却没有?

目标:

创建一个下拉视图,折叠时高度为 75 像素。展开后,其高度为 225px。当按下启动动画的按钮时,它会并行运行两个动画,一个用于高度的计时函数,一个用于不透明度的计时函数。目标的第二部分是对下拉列表下部的不透明度进行动画处理expanded == true

问题:

扩展视图时动画按预期运行,没有问题。但是当折叠下拉菜单时,似乎只有不透明动画运行。问题在于高度,没有正确反映在视图中。它保持与展开时相同的高度。

这是组件:

const ListItem = (props) => {
    const [checkInModal, setCheckInModal] = useState(false);
    const [animatedHeight, setAnimatedHeight] = useState(new Animated.Value(0))
    const [animatedOpacity] = useState(new Animated.Value(0))
    const [expanded, setExpanded] = useState(false);

    const toggleDropdown = () => {
        console.log("BEFORE ANIMATION =>" + "\n" + "expanded: " + expanded + "\n" + "animatedHeight: " + JSON.stringify(animatedHeight) + "\n" + "animatedOpacity: " + JSON.stringify(animatedOpacity))
        if (expanded == true) {
            // collapse dropdown
            Animated.parallel([
                Animated.timing(animatedHeight, { …
Run Code Online (Sandbox Code Playgroud)

reactjs react-native react-animated

3
推荐指数
1
解决办法
2885
查看次数

如何使一个组件淡入而另一个组件淡出?

在类组件中,我有两个视图,一个作为占位符,一个用于图像。占位符会显示,直到某些状态发生变化(当图像完成加载时),然后图像才会显示。我正在尝试添加一些动画,并在状态更改时让图像淡入和占位符淡出。

下面是两个视图的相关渲染函数:

renderImage = (filePath: string): JSX.Element => {
    const { isImageLoaded } = this.state;
    if (isImageLoaded) {
        return (
            <View style={Styles.imageContainer}>
                    <Image source={{ uri: filePath, cache: 'reload' }}/>
            </View>
        );
    }

    return (
        <View style={Styles.placeholderContainer}>
        </View>
    );
};
Run Code Online (Sandbox Code Playgroud)

我知道我需要将视图更改为Animated.View并具有淡入/淡出功能,如下所示:

Animated.timing(this.state.opacity, {
      toValue: 1,
      duration: 500,
      useNativeDriver: true,
    }).start();
Run Code Online (Sandbox Code Playgroud)

setState在状态回调中调用淡入/淡出函数的正确方法是isImageLoaded?或者有没有一种方法可以触发动画而无需手动调用它们setState

react-native react-animated

3
推荐指数
1
解决办法
3675
查看次数