概要
基本的に結構使ってるアニメーションを纏めたreact-native-animatableライブラリを使ってアニメーションを利用する方法について説明します。
このブログではリアクトネイティブ(React Native)にtypescript
とstyled-components
が適用されたプロジェクトで説明します。リアクトネイティブ(React Native)でtypescript
とstyled-components
を適用する方法については以前のブログを確認してください。
ライブラリインストール
react-native-animatableライブラリを使うため、下記のコマンドでライブラリをインストールします。
npm install react-native-animatable --save
基本的な使い方
下記のようにアニメーションを追加した部分にソースを追加します。
- Functional Component
...
import * as Animatable from 'react-native-animatable';
...
const App = () => {
...
return (
<Animatable.Text animation="zoomInUp">Zoom me up, Scotty</Animatable.Text>
);
}
- Class Component
...
import * as Animatable from 'react-native-animatable';
...
export default class App extends React.Component<Props, State> {
...
render() {
...
return (
<Animatable.Text animation="zoomInUp">Zoom me up, Scotty</Animatable.Text>
);
}
...
}
イベントを通じて使い方
リアクトネイティブ(React Native)のref
を使ってユーザーイベントが発生した時、アニメーションが実行されるように作れます。
- Functional Component
...
import * as Animatable from 'react-native-animatable';
...
const Page = () => {
const AnimationRef = useRef(null);
...
const _onPress = () => {
if(AnimationRef) {
AnimationRef.current?.bounce();
}
}
...
return (
<TouchableWithoutFeedback onPress={_onPress}>
<Animatable.View ref={AnimationRef}>
<Text>Bounce me!</Text>
</Animatable.View>
</TouchableWithoutFeedback>
);
}
- Class Component
...
import * as Animatable from 'react-native-animatable';
...
export default class Page extends React.Component<Props, State> {
private AnimationRef;
...
render() {
...
return (
<TouchableWithoutFeedback onPress={this._onPress}>
<Animatable.View ref={ref => (this.AnimationRef = ref)}>
<Text>Bounce me!</Text>
</Animatable.View>
</TouchableWithoutFeedback>
);
}
...
private _onPress = () => {
this.AnimationRef.bounce();
}
...
}
styled-components
styled-componentsで作ったコンポーネント(component)にアニメーションを適用する方法です。
- Functional Component
...
import styled from 'styled-components/native';
import * as Animatable from 'react-native-animatable';
...
const StyledImage = Animatable.createAnimatableComponent(styled.Image``);
...
const App = () => {
...
return (
<StyledImage
animation="bounceIn"
delay={1000}
useNativeDriver={true}
source={src}
/>
);
}
- Class Component
...
import styled from 'styled-components/native';
import * as Animatable from 'react-native-animatable';
...
const StyledImage = Animatable.createAnimatableComponent(styled.Image``);
...
export default class App extends React.Component<Props, State> {
...
render() {
...
return (
<StyledImage
animation="bounceIn"
delay={1000}
useNativeDriver={true}
source={src}
/>
);
}
...
}
使えるアニメーション
使えるアニメーションはreact-native-animatable
の公式レポジトリ(Repository)で例と一緒に確認できます。
下記は使えるアニメーションのリストです。
- bounce
- flash
- jello
- pulse
- rotate
- rubberBand
- shake
- swing
- tada
- wobble
- bounceIn
- bounceInDown
- bounceInUp
- bounceInLeft
- bounceInRight
- bounceOut
- bounceOutDown
- bounceOutUp
- bounceOutLeft
- bounceOutRight
- fadeIn
- fadeInDown
- fadeInDownBig
- fadeInUp
- fadeInUpBig
- fadeInLeft
- fadeInLeftBig
- fadeInRight
- fadeInRightBig
- fadeOut
- fadeOutDown
- fadeOutDownBig
- fadeOutUp
- fadeOutUpBig
- fadeOutLeft
- fadeOutLeftBig
- fadeOutRight
- fadeOutRightBig
- flipInX
- flipInY
- flipOutX
- flipOutY
- lightSpeedIn
- lightSpeedOut
- slideInDown
- slideInUp
- slideInLeft
- slideInRight
- slideOutDown
- slideOutUp
- slideOutLeft
- slideOutRight
- zoomIn
- zoomInDown
- zoomInUp
- zoomInLeft
- zoomInRight
- zoomOut
- zoomOutDown
- zoomOutUp
- zoomOutLeft
- zoomOutRight
完了
簡単なアニメーションを早く導入したい時、react-native-animatable
ライブラリを使うことをおすすめします。
参考
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
今見てるブログを作成た
興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。