图片平移实现水波动画

import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View,
    Image,
    Dimensions,
    Animated,
    Navigator,
    DeviceEventEmitter,
    Alert,
    ART,
    Group,
    Easing,
} from 'react-native';
var deviceWidth =Dimensions.get ('window').width;
var deviceHeight = Dimensions.get('window').height;
var timing = Animated.timing;
var aaa = null;
const {Surface, Shape, Path} = ART;
var rn = React.createClass({
  getInitialState(){ // 为图片赋初值
    return {
        runningDogeTrans1 : new Animated.ValueXY({
            x: 0,
            y: Dimensions.get('window').height/2 - 120
        }),
        runningDogeTrans2 : new Animated.ValueXY({
            x: Dimensions.get('window').width-0.5,
            y: Dimensions.get('window').height/2 - 120
        }), 
        runningDogeTrans3 : new Animated.ValueXY({
            x: -Dimensions.get('window').width+0.5,
            y: Dimensions.get('window').height/2 - 120
        }),
        runningDogeTrans4 : new Animated.ValueXY({
            x: 0,
            y: Dimensions.get('window').height/2 - 120
        }), 
    }
  },
  componentDidMount() {
      this.startAnimation();//启动动画
  },

  startAnimation:function() {

     // 新周期开始 初始化图片位置

      this.state.runningDogeTrans1.setValue({x: 0, y: Dimensions.get('window').height/2 - 120});
      this.state.runningDogeTrans2.setValue({x: Dimensions.get('window').width-0.5, y: Dimensions.get('window').height/2 - 120});
      this.state.runningDogeTrans3.setValue({x: -Dimensions.get('window').width+0.5, y: Dimensions.get('window').height/2 - 120});

      this.state.runningDogeTrans4.setValue({x: 0, y: Dimensions.get('window').height/2 - 120});


      aaa = Animated.parallel([ 
            timing(this.state.runningDogeTrans1, {
                toValue: {
                    x: -Dimensions.get('window').width,
                    y: Dimensions.get('window').height/2 - 120
                },
                duration: 2000,//2000毫秒将动画从初始位置移动到toValue的位置
                easing: Easing.linear//以线性函数对动画进行缓冲
            }),     
            timing(this.state.runningDogeTrans2, {
                toValue: {
                    x: 0,
                    y: Dimensions.get('window').height/2 - 120
                },
                duration: 2000,
                easing: Easing.linear
            }),
            timing(this.state.runningDogeTrans3, {
                toValue: {
                    x: 0,
                    y: Dimensions.get('window').height/2 - 120
                },
                duration: 2000,
                easing: Easing.linear
            }),    
            timing(this.state.runningDogeTrans4, {
                toValue: {
                    x: Dimensions.get('window').width,
                    y: Dimensions.get('window').height/2 - 120
                },
                duration: 2000,
                easing: Easing.linear
            }),
      ])
      aaa.start(() => this.startAnimation());//回调实现动画的循环
  },
  render(){
       return (
           <View style={styles1.container}>
                <Animated.View style={[styles1.doges, {
                    transform: this.state.runningDogeTrans1.getTranslateTransform()
                }]}>
                    <Image style = {{height:292/1620*deviceWidth,width:deviceWidth}} source={require('./img/rect1.png')}/>
                </Animated.View>
                <Animated.View style={[styles1.doges, {
                    transform: this.state.runningDogeTrans2.getTranslateTransform()
                }]}>
                    <Image style = {{height:292/1620*deviceWidth,width:deviceWidth}} source={require('./img/rect1.png')}/>
                </Animated.View>
                                <Animated.View style={[styles1.doges, {
                    transform: this.state.runningDogeTrans3.getTranslateTransform()
                }]}>
                    <Image style = {{height:292/1620*deviceWidth,width:deviceWidth}} source={require('./img/rect2.png')}/>
                </Animated.View>
                <Animated.View style={[styles1.doges, {
                    transform: this.state.runningDogeTrans4.getTranslateTransform()
                }]}>
                    <Image style = {{height:292/1620*deviceWidth,width:deviceWidth}} source={require('./img/rect2.png')}/>
                </Animated.View>
          </View>
    );
   }
  },
}); 
const styles1 = StyleSheet.create({
  doges: {
      position: 'absolute',
      borderWidth: 0,
  },
  container: {
    flex: 1,
    justifyContent: 'center',                                                                                                                                                                                                                                                             alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
});   
AppRegistry.registerComponent('rn', () => rn);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值