react native 動畫1 animated

http://www.alloyteam.com/2016/01/reactnative-animated/

http://www.alloyteam.com/2016/01/reactnative-animated/

/**
 * Created by Administrator on 2016/12/10.
 */
import React, { Component } from 'react';
import {
    StyleSheet,
    Text,
    Animated,
    ScrollView,
    Alert,
    Easing,
    View
} from 'react-native';

class AnimatedDemo extends Component {
    // 構造
    constructor(props) {
        super(props);
        this.state = {
            scale: new Animated.Value(0),

            imgScaleValue: new Animated.Value(0),
            imgRotateValue: new Animated.Value(0),
            imgTranslateXValue: new Animated.Value(0),
            fadeInOpacity: new Animated.Value(0.5),

            rotation: new Animated.Value(0),
            fontSize: new Animated.Value(0),

            animateMaps: [1, 2, 3].map(() => new Animated.Value(0)), // 初始化3個值

        };
        this.state.scale.addListener((value) => {
            console.log("scale",value);  //value.value 為0----0.8
        });
    }

    /*單個動畫*/
    _onPress1 = ()=> {
        this.state.scale.setValue(0);     // 設置一個較大的初始值
        Animated.spring(                          // 可選的基本動畫類型: spring, decay, timing
            this.state.scale,                 // 將`bounceValue`值動畫化
            {
                toValue: 0.8,                         // 將其值以動畫的形式改到一個較小值
                friction: 1,                          // Bouncier spring
            }
        ).start(); // 開始執(zhí)行動畫
    }
    /*動畫序列*/
    _onPress2 = ()=> {
        this.state.imgScaleValue.setValue(0);
        this.state.imgTranslateXValue.setValue(0);
        this.state.imgRotateValue.setValue(0);
        Animated.parallel([            // 首先執(zhí)行decay動畫,結束后同時執(zhí)行spring和twirl動畫
            Animated.spring(this.state.imgTranslateXValue, {
                toValue: 100    // 返回到起始點開始
            }),
            Animated.spring(                          // 可選的基本動畫類型: spring, decay, timing
                this.state.imgScaleValue,                 // 將`bounceValue`值動畫化
                {
                    toValue: 0.8,                         // 將其值以動畫的形式改到一個較小值
                    friction: 1,                          // Bouncier spring
                }
            ),
            Animated.spring(this.state.imgRotateValue, {   // 同時開始旋轉
                toValue: 1
            }),
        ]).start();
    }
    _onPress3 = ()=> {
        /*設置為初始值*/
        ['fadeInOpacity', 'rotation', 'fontSize'].map(property => {
            return this.state[property].setValue(0);
        });
        /*開啟動畫*/
        Animated.parallel(['fadeInOpacity', 'rotation', 'fontSize'].map(property => {
            return Animated.timing(this.state[property], {
                toValue: 1,
                duration: 1000,
                easing: Easing.linear
            });
        })).start();
    }

    _onPress4 = ()=> {
        var timing = Animated.timing;
        Animated.sequence([
                Animated.stagger(200, this.state.animateMaps.map(left => {
                    return timing(left, {
                        toValue: 1,
                    });
                }).concat(
                    this.state.animateMaps.map(left => {
                        return timing(left, {
                            toValue: 0,
                        });
                    })
                )), // 三個view滾到右邊再還原翩瓜,每個動作間隔200ms
                Animated.delay(400), // 延遲400ms,配合sequence使用
                timing(this.state.animateMaps[0], {
                    toValue: 1
                }),
                timing(this.state.animateMaps[1], {
                    toValue: -1
                }),
                timing(this.state.animateMaps[2], {
                    toValue: 0.5
                }),
                Animated.delay(400),
                Animated.parallel(this.state.animateMaps.map((anim) => timing(anim, {
                    toValue: 0
                }))) // 同時回到原位置
            ]
        ).start();
    }

    render() {

        var views = this.state.animateMaps.map(function (value, i) {
            return (
                <Animated.View
                    key={i}
                    style={[styles.content4, {
                    left: value.interpolate({
                        inputRange: [0,1],
                        outputRange: [0,200]
                    })
                }]}>
                    <Text style={styles.text4}>我是第{i + 1}個View</Text>

                </Animated.View>
            );
        });

        return (
            <ScrollView>
                <Animated.Image                         // 可選的基本組件類型: Image, Text, View
                    source={{uri: 'http://avatar.csdn.net/5/B/3/1_cryhelyxx.jpg'}}
                    style={[styles.img,{
                    transform: [                        // `transform`是一個有序數(shù)組(動畫按順序執(zhí)行)
                            {scale:this.state.scale},  // 將`bounceValue`賦值給 `scale`
                           ]}
                    ]}
                    />
                <Text style={styles.text} onPress={this._onPress1}>控制圖片動畫1</Text>

                <Animated.Image                         // 可選的基本組件類型: Image, Text, View
                    source={{uri: 'http://avatar.csdn.net/5/B/3/1_cryhelyxx.jpg'}}
                    style={[styles.img,{
                    transform: [                        // `transform`是一個有序數(shù)組(動畫按順序執(zhí)行)
                            {scale:this.state.imgScaleValue},  // 將`bounceValue`賦值給 `scale`
                            {translateX: this.state.imgTranslateXValue},
                            {rotate: this.state.imgRotateValue.interpolate({
                                inputRange: [0,1],
                                outputRange: ['0deg', '360deg']
                            })},
                           ]
                           }
                    ]}
                    />
                <Text style={styles.text} onPress={this._onPress2}>控制圖片動畫2</Text>


                <Animated.View style={[styles.content, {
                    opacity: this.state.fadeInOpacity,
                        transform: [{
                            rotateZ: this.state.rotation.interpolate({
                                inputRange: [0,1],
                                outputRange: ['0deg', '360deg']
                            })
                        }]
                    }]}>
                    <Animated.Text style={{
                        color:"red",
                        fontSize: this.state.fontSize.interpolate({
                            inputRange: [0,1],
                            outputRange: [12,26]
                        })
                        }}>
                        我騎著七彩祥云出現(xiàn)了????
                    </Animated.Text>
                </Animated.View>
                <Text style={styles.text} onPress={this._onPress3}>動畫3</Text>

                {views}
                <Text style={styles.text} onPress={this._onPress4}>動畫4</Text>
            </ScrollView>
        );
    }
}

const styles = StyleSheet.create({
    text: {
        fontSize: 20,
        textAlign: 'center',
        backgroundColor: "yellow",
        padding: 10,
        margin: 10,
    },
    content: {
        backgroundColor: 'yellow',
        borderWidth: 1,
        borderColor: 'blue',
        padding: 2,
        margin: 20,
        borderRadius: 10,
        alignItems: 'center',
    },
    content4: {
        borderWidth: 1,
        borderColor: 'blue',
        alignItems: 'center',
        backgroundColor: "green",
    },
    text4: {
        fontSize: 20,
        textAlign: 'center',
    },
    img: {
        width: 50,
        height: 50,
        resizeMode: "center",
    },
});
export default AnimatedDemo;

addListener的輸出

Paste_Image.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子劲腿,更是在濱河造成了極大的恐慌焦人,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異袋倔,居然都是意外死亡宾娜,警方通過查閱死者的電腦和手機前塔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人顶燕,你說我怎么就攤上這事涌攻。” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我谭企,道長债查,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮剥汤,結果婚禮上吭敢,老公的妹妹穿的比我還像新娘鹿驼。我一直安慰自己畜晰,他們只是感情好凄鼻,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布膘格。 她就那樣靜靜地躺著瘪贱,像睡著了一般菜秦。 火紅的嫁衣襯著肌膚如雪喷户。 梳的紋絲不亂的頭發(fā)上褪尝,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機與錄音璃谨,去河邊找鬼。 笑死,一個胖子當著我的面吹牛铸抑,可吹牛的內容都是我干的鹊汛。 我是一名探鬼主播刁憋,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泥耀?” 一聲冷哼從身側響起痰催,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤凶硅,失蹤者是張志新(化名)和其女友劉穎足绅,沒想到半個月后氢妈,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體首量,經...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了柄延。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搜吧。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡撩满,死狀恐怖伺帘,靈堂內的尸體忽然破棺而出伪嫁,到底是詐尸還是另有隱情张咳,我是刑警寧澤脚猾,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布龙助,位于F島的核電站提鸟,受9級特大地震影響沽一,放射性物質發(fā)生泄漏铣缠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧北发,春花似錦琳拨、人聲如沸狱庇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驻债。三九已至形葬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淌实,已是汗流浹背猖腕。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留放坏,地道東北人老玛。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓钧敞,卻偏偏與公主長得像麸粮,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子愚战,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內容

  • React Native優(yōu)秀博客寂玲,以及優(yōu)秀的Github庫列表(很多英文資料源自于[awesome-react-n...
    董董董董董董董董董大笨蛋閱讀 10,594評論 4 162
  • 事情發(fā)生在都市中心的一所醫(yī)院里洛搀,一個滿身纏著白布的人在角落里的病床上躺著留美,一旁的醫(yī)生和護士都在搖頭晃腦。 ...
    Cate魔王閱讀 121評論 0 2