2

我们的 Android 代码库中有一个回收器视图,我们希望将其转换为原生 UI 组件并在 React Native 中使用它。

我正在对一些功能进行原型设计并遇到了这个问题。

我们必须基于onScrollBeginDrag事件来实现一个弹簧动画。我无法使其与useNativeDriver:true一起使用。如果我在 React 线程上收听事件并更新它的动画值,它会工作,但它偶尔会遇到故障。

这是不起作用的代码片段:

this._onRegisterLastScroll = Animated.event(
      [{ nativeEvent: { contentOffset: { y: this._lastScrollY } } }],
      { useNativeDriver: true }
    );

但是这个确切的代码适用于useNativeDriver: true.

我也尝试过attachNativeEvent,但这也不起作用:

componentDidMount() {
    Animated.attachNativeEvent(
      this.nativeScroll,
      'onScrollBeginDrag',
      [{nativeEvent: {contentOffset: {y: this._lastScrollY}}}],
    );
  }

我正在onScrollBeginDrag我的 android 代码库上正确注册事件,并通过记录事件正在流动来验证这一点。这是我用来从 android recycler 视图推送事件的一段代码。

    @Override
    public boolean onInterceptTouchEvent(MotionEvent e) {
        try {
            if (super.onInterceptTouchEvent(e)) {
                final Context context = getContext();
                if (context instanceof ReactContext) {
                    ScrollEvent.obtain(
                            getId(),
                            ScrollEventType.BEGIN_DRAG,
                            this.computeHorizontalScrollOffset(),
                            this.computeVerticalScrollOffset(),
                            0,
                            0,
                            getChildAt(0).getWidth(),
                            getChildAt(0).getHeight(),
                            getWidth(),
                            getHeight()).dispatch(((ReactContext) context).getJSModule(RCTEventEmitter.class));
                }
                return true;
            }
        } catch (IllegalArgumentException exception) {
        }

        return false;
    }

那里的 React Native 专家,你还有什么我应该做的来完成这项工作吗?

4

0 回答 0