React Native PanResponder — эффект прокрутки / имитация

#react-native #animation #react-native-scrollview

#react-native #Анимация #реагирующий-нативный -scrollview

Вопрос:

Я хотел бы создать эффект прокрутки с помощью PanResponder (использование Scrollview в моем конкретном случае невозможно). Если я распадаюсь и пытаюсь сгладить анимацию, onPanResponderRelease анимация начинает мерцать, потому что установленное смещение onPanResponderGrant не учитывает текущую анимацию сглаживания. У кого-нибудь есть решение этой проблемы?

  const panResponder = React.useRef(
    PanResponder.create({
      onMoveShouldSetPanResponder: () => true,
      onPanResponderGrant: (evt, gestureState) => {
        pan.setOffset({
          x: pan.x._value,
          y: pan.y._value,
        });
      },
      onPanResponderMove: (evt, gestureState) =>
        Animated.event([null, {dx: pan.x, dy: pan.y}], {
          useNativeDriver: false,
        }),
      onPanResponderRelease: (evt, {vx, vy}) => {
        pan.flattenOffset();
        let velocity;

        if (vx >= 0) {
          velocity = clamp(vx, 0, 5);
        } else if (vx < 0) {
          velocity = clamp(vx * -1, 0, 5) * -1;
        }

        Animated.decay(pan, {
          velocity: {x: velocity, y: vy},
          deceleration: 0.99,
          useNativeDriver: false,
        }).start();
      },
    }),
  ).current;