slideInImage.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import React, { useRef, useEffect } from 'react';
  2. import {
  3. Animated,
  4. StyleSheet,
  5. View,
  6. Image,
  7. Dimensions,
  8. ImageSourcePropType
  9. } from 'react-native';
  10. import {
  11. widthPercentageToDP as wp,
  12. heightPercentageToDP as hp
  13. } from 'react-native-responsive-screen';
  14. interface SlideInImageProps {
  15. source: ImageSourcePropType;
  16. }
  17. const SlideInImage: React.FC<SlideInImageProps> = ({ source }) => {
  18. const slideAnim = useRef(new Animated.Value(-200)).current;
  19. useEffect(() => {
  20. Animated.timing(slideAnim, {
  21. toValue: 0,
  22. duration: 1000,
  23. useNativeDriver: true
  24. }).start();
  25. }, [slideAnim]);
  26. return (
  27. <Animated.View
  28. style={[
  29. styles.imageContainer,
  30. {
  31. transform: [{ translateX: slideAnim }]
  32. }
  33. ]}
  34. >
  35. <Image source={source} style={styles.image} resizeMode="contain" />
  36. </Animated.View>
  37. );
  38. };
  39. const styles = StyleSheet.create({
  40. imageContainer: {
  41. flex: 1
  42. },
  43. image: {
  44. height: wp('40%'),
  45. width: wp('100%')
  46. }
  47. });
  48. export default SlideInImage;