我们的 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 专家,你还有什么我应该做的来完成这项工作吗?