シミュレーターでは表示されますが、デバイスでは Lottie のアニメーションが再生されず、何も表示されない問題が発生していました。
以下の Stackoverflow の記事を元に修正したところ、デバイスでも表示できるようになったため、共有します。
shell
npx expo install lottie-react-native
実機端末の Expo Go 上でも上の画像と同じようにアニメーションが再生されています。
動くコードは以下のとおりです。
LottieImage.tsx
import tw from 'twrnc';
import { View, Text, TouchableOpacity } from 'react-native';
import LottieView from 'lottie-react-native';
import { useEffect, useRef } from 'react';
export default function LottieImage() {
const animation = useRef<LottieView>(null);
const play = () => {
animation.current?.play();
};
const pause = () => {
animation.current?.pause();
};
const stop = () => {
animation.current?.reset();
};
useEffect(() => {}, []);
return (
<View style={tw`flex-1 justify-center items-center`}>
<TouchableOpacity onPress={play}>
<Text>Play</Text>
</TouchableOpacity>
<TouchableOpacity onPress={stop}>
<Text>stop</Text>
</TouchableOpacity>
<TouchableOpacity onPress={pause}>
<Text>pause</Text>
</TouchableOpacity>
<LottieView
autoPlay={false}
ref={animation}
style={{
width: 200,
height: 200,
backgroundColor: '#eee',
}}
source={require('./check.json')}
loop={false}
/>
</View>
);
}
Expo の公式サイトでは animation.current?.play
がコメントアウトされていますが、animation.current?.play
を使わないとうまくアニメーションが表示できませんでした。
LottieView の autoPlay
は削除しました。
また、サンプルでは ./assets/check.json
のように assets
を指定して Lottie File を読み込んでいるものが多いですが、コンポーネントと同じディレクトリに配置しました。
Lottie については、LottieFiles からいい感じのものを選び、 json をダウンロードしています。