react-native-reanimated 动画库单张图片-loading动画实现

import React from 'react';
import { StyleSheet, View } from 'react-native';

import Animated, {
  Easing,
  useAnimatedStyle,
  useSharedValue,
  withRepeat,
  withTiming,
} from 'react-native-reanimated';
import { zoom } from '~common/mx-ui/autoresizing/Autosizing';

const duration = 1500;
const easing = Easing.bezier(0, 0, 0, 0);

interface Props {
  // 正常0  build 1
  loadingType?: number;
}

// 智能文案选择生成动画
const LoadingView: React.FC<Props> = props => {
  const sv = useSharedValue<number>(0);

  React.useEffect(() => {
    sv.value = withRepeat(withTiming(1, { duration, easing }), -1);
    // eslint-disable-next-line react-hooks/exhaustive-deps
  }, []);

  const animatedStyle = useAnimatedStyle(() => ({
    transform: [{ rotate: `${sv.value * 360}deg` }],
  }));

  return (
    <View style={styles.warrper}>
      <Animated.Image
        source={
          props.loadingType === 0
            ? require('~assets/images/text_ai/ic_loading_normal.png')
            : require('~assets/images/text_ai/ic_loading.png')
        }
        style={[styles.image, animatedStyle]}
      />
    </View>
  );
};

const styles = StyleSheet.create({
  warrper: {
    // alignItems: 'center',
    // justifyContent: 'center',
    // flex: 1,
  },
  image: {
    width: zoom(20),
    height: zoom(20),
  },
});

export default LoadingView;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值