2015-09-17 36 views
29

Come passare all'animazione da un colore a un altro in React Native. Ho scoperto che interpolando un Animated.Value è possibile animare i colori da:Animazione backgroundColor in React Native

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)'] 
}) 

e

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

Ma con questo metodo, passando dal nero al blu, si deve passare attraverso rosso. Aggiungi più colori al mix e finisci in una discoteca degli anni '80.

C'è un altro modo per farlo che ti permette di passare direttamente da un colore all'altro?

Grazie.

+0

Nel tuo esempio per l'utilizzo da inputRange: [NERO, ROSSO, BLU]. Se lo cambi in [NERO, BLU] il colore si anima dal nero al blu come ti aspetteresti? –

+0

Funzionerebbe, ma è l'opposto di quello di cui ho bisogno. Devo aggiungere colori all'elenco e passare da uno all'altro a seconda dell'azione dell'utente. Quindi, da NERO a BLU, quindi da BLU a VERDE, quindi da VERDE a GIALLO, ad esempio. – nicholas

risposta

2

Se si riuscisse a ottenere il colore del valore del colore animato nell'istante in cui si è premuto il pulsante, probabilmente si potrebbe farlo. Qualcosa del genere:

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

Quindi per ogni pulsante si imposta un diverso targetColor.

29

Dato avete Animated.Value Diciamo x, è possibile interpolare il colore in questo modo:

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> 
    ); 
} 

Si possono trovare piena esempio funzionante nel numero che ho postato su github.

+0

La versione nativa del react più recente potrebbe avere un bug - provare questo codice per interpolare da bianco a blu e ottenere un errore "puntelli ricevuti errati" con "rgba (255,255,255,1)" dove è previsto "rgba (255,255,255,1.0)". Indagare. –

+4

Ah, stavo cercando di aggiungere l'animazione sopra l'esempio di codice sopra e ho dimenticato di usare Animated.View invece della normale vista. Passando a risolto il mio problema. –

-6

Utilizzare setValue e lo stato per controllare i colori di inizio e fine.

0

È possibile anche interpolare nei passaggi, per i valori non numerici come il colore, come questo:

<Animated.Text 
    style={{ 
    color: colorAnim.interpolate({ 
     inputRange: [0, 0.5, 1], 
     outputRange: ['black', 'gray', 'white'] 
    }) 
    }}>