老規矩,先上效果圖!沒有效果圖的動畫分享都是耍流氓。 css
以上兩個動畫拆解完畢,接下來上代碼react
react部分android
<Animated.Image
style={
[styles.backshine,
{transform: [
{ rotate: this.state.rotate.interpolate(
inputRange:{[0,1],
outputRange:['0deg', '360deg']})}
]
}
]
}
source={require('resource/newtask/backshine.png')}
/>
複製代碼
js部分css3
_animateStart=()=>{
this.state.fadeInOpacity.setValue(0);
this.state.rotation.setValue(0);
Animated.loop(Animated.timing(this.state.rotation, {
toValue: 1,
duration:4000,
easing:Easing.linear,
delay:0,
useNativeDriver:true, // 啓用原生動畫驅動
isInteraction: false
});
).start();
};
複製代碼
Animated.loop(animation, config).start(),循環播放動畫;詳細見官方文檔; useNativeDriver:true, //啓用原生動畫驅動;
能極大提高動畫流暢度,沒加原生驅動,動畫會出現卡頓現象;推薦使用;但要注意原生驅動不支持全部css3動畫;
InteractionManager:false:指定本動畫是否在InteractionManager的隊列中註冊以影響其任務調度。默認值爲 true。在此動畫中設置爲false;(官網釋義能夠說很是難懂),我本身的理解:在InteractionManager的隊列中註冊,意味着等全部互動或動畫完成以後再執行此動畫,好處就是不影響其餘交互或動畫流暢度;bash
react部分:css3動畫
<Animated.Image
style={[
styles.shiningbg,
{opacity: this.state.opacity.interpolate(
{inputRange: [0,0.5,1],
outputRange:[0,1,0]}
)}
]}
source={require('resource/newtask/shiningbg.png')}
/>
複製代碼
interpolate 插值函數,能夠看到透明度的變化是0-1-0,若是透明度變化寫成0-1,效果只有從暗變到明,不會從明變到暗;因此須要寫成0-1-0;app
js部分:函數
Animated.loop(Animated.timing(this.state.fadeInOpacity, {
toValue: 1,
duration:2000,
easing:Easing.linear,
delay:300,
useNativeDriver:true, // 啓用原生動畫驅動
isInteraction: false
});
).start();
複製代碼
最後提一句,app名字 — 「種子視頻」,動畫在android端app;oop