一個簡單的react-native Animated動畫

一個最基本的Animated創(chuàng)建過程如下:

  1. 創(chuàng)建Animated.Value,設(shè)置初始值,比如一個視圖的opacity屬性,最開始設(shè)置Animated.Value(0),來表示動畫的開始時候,視圖是全透明的。

  2. AnimatedValue綁定到Style的可動畫屬性,比如透明度,{opacity: this.state.fadeAnim}。

  3. 使用Animated.timing來創(chuàng)建自動的動畫,或者使用Animated.event來根據(jù)手勢,觸摸,Scroll的動態(tài)更新動畫的狀態(tài)。

  4. 調(diào)用Animated.timing.start()開始動畫。

一個簡單的例子:

實現(xiàn)tab切換時,底部線條跟隨著移動。最終效果:

image.png

實現(xiàn)步驟:

  • 因為改變的是底部線條的位置,所以設(shè)置初始值position:
this.state = {
  position: new Animated.Value(0)
};
  • AnimatedValue綁定到Style:
<Animated.View style={[
  styles.indicator,
  {
    transform: [
      { translateX: -baseWidth / 2 },
      { translateX: this._translateX },  
      { translateX: baseWidth / 2 }
    ]
  }
]}/>
this._translateX = this.state.position.interpolate({
  inputRange: [0, 1],
  outputRange: [position_0, position_1] // 兩個位置下,線條距離左邊框的長度
});

上面的栗子使用了interpolate函數(shù),也就是插值函數(shù)。這個函數(shù)很強大,實現(xiàn)了數(shù)值大小、單位的映射轉(zhuǎn)換。 interpolate一般用于多個動畫共用一個Animated.Value,只需要在每個屬性里面映射好對應的值,就可以用一個變量控制多個動畫。

  • 創(chuàng)建動畫并開始
Animated.timing(this.state.position, {
  toValue: index,   // 目標值
  useNativeDriver: true   // 使用原生驅(qū)動,防止動畫卡頓
}).start();

我這里的index是指線條的下標,分別為0,1。切換時,0,1分別映射到了位置的兩個值,position_0, position_1。這就是interpolate的用法,所以說同一時間可以指定很多動畫,只要是同一個inputRange,在這個時間內(nèi),就可以同時響應動畫輸出outputRange。

Done.

更多屬性可參考:官方文檔、詳解React Native動畫

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容