2015-09-17 9 views
29

मैं प्रतिक्रिया मूल में एक रंग से दूसरे रंग में एनिमेट करने के बारे में कैसे जाउंगा। मैंने पाया कि एक Animated.Value interpolating द्वारा आप से रंग चेतन कर सकते हैं:पृष्ठभूमि को एनिमेट करना प्रतिक्रिया मूल में

var BLACK = 0; 
var RED = 1; 
var BLUE = 2; 

backgroundColor: this.state.color.interpolate({ 
    inputRange: [BLACK, RED, BLUE], 
    outputRange: ['rgb(0, 0, 0)', 'rgb(255, 0, 0)', 'rgb(0, 0, 255)'] 
}) 

और

Animated.timing(this.state.color, {toValue: RED}).start(); 

लेकिन इस पद्धति का उपयोग, काले से नीले रंग के लिए जा रहा है, तो आप लाल के माध्यम से जाना है। मिश्रण में और रंग जोड़ें और आप 1 9 80 के डिस्को में खत्म हो जाते हैं।

क्या ऐसा करने का कोई और तरीका है जो आपको सीधे एक रंग से दूसरे रंग में जाने की अनुमति देता है?

धन्यवाद।

+0

अपने उदाहरण में आपके उपयोग inputRange: [काले, लाल, नीले]। यदि आप इसे [काला, नीला] में बदलते हैं तो क्या आप काले रंग से नीले रंग के रंग को एनिमेट करते हैं? –

+0

यह काम करेगा, लेकिन मुझे जो चाहिए वह विपरीत है। मुझे उपयोगकर्ता कार्रवाई के आधार पर सूची में रंग जोड़ने और एक से दूसरे में संक्रमण जोड़ने की आवश्यकता है। तो ब्लैक से ब्लू तक, फिर नीले से ग्रीन तक, फिर ग्रीन से पीले रंग तक, उदाहरण के लिए। – nicholas

उत्तर

2

यदि आप तुरंत दबाए गए एनिमेटेड कलर वैल्यू का रंग प्राप्त कर सकते हैं तो आप बटन दबाएंगे तो आप शायद इसे कर सकते हैं। इस तरह कुछ:

var currentColor = ? : 
this.state.color = 0; 
var bgColor = this.state.color.interpolate({ 
    inputRange: [0, 1], 
    outputRange: [currentColor, targetColor] 
}); 

तो प्रत्येक बटन के लिए आप एक अलग लक्ष्य रंग निर्धारित करेंगे।

29

को देखते हुए आप Animated.Value देता x कहते हैं, अगर आप इस तरह रंग को जोड़ सकते हैं:

render() { 
    var color = this.state.x.interpolate({ 
     inputRange: [0, 300], 
     outputRange: ['rgba(255, 0, 0, 1)', 'rgba(0, 255, 0, 1)'] 
    }); 

    return (
     <View style={{backgroundColor:color}}></View> 
    ); 
} 

आप इस मुद्दे को मैं github पर पोस्ट किया है पर पूरा काम कर उदाहरण मिल सकते हैं।

+0

नवीनतम प्रतिक्रिया-मूल संस्करण में एक बग हो सकता है - इस कोड को सफेद से नीले रंग में विभाजित करने और 'rgba (255,255,255,1)' के साथ "प्राप्त खराब प्रोप" त्रुटि प्राप्त करने की कोशिश कर रहा है, जहां यह 'rgba (255,255,255,1.0)' की अपेक्षा कर रहा है। जांच। –

+4

आह, मैं उपर्युक्त कोड उदाहरण के शीर्ष पर एनीमेशन जोड़ने की कोशिश कर रहा था और नियमित दृश्य के बजाय एनिमेटेड। व्यू का उपयोग करना भूल गया था। <एनिमेटेड। व्यू> पर स्विचिंग मेरी समस्या तय की गई। –

-6

setValue का उपयोग करें और प्रारंभ और अंत रंगों को नियंत्रित करने के लिए राज्य का उपयोग करें।

0

तुम भी चरणों में अंतर्वेशन सकते हैं, इस तरह रंग की तरह गैर-अंकीय मान, के लिए:

<Animated.Text 
    style={{ 
    color: colorAnim.interpolate({ 
     inputRange: [0, 0.5, 1], 
     outputRange: ['black', 'gray', 'white'] 
    }) 
    }}> 
संबंधित मुद्दे