bolan9999 / react-native-largelist

The best large list component for React Native.
https://bolan9999.github.io/react-native-largelist/
MIT License
2.32k stars 261 forks source link

一些问题和解决方法 #442

Closed edisonlao closed 3 years ago

edisonlao commented 3 years ago

由于大佬很久没有维护这个库了,我把遇到的一些问题或需求以及解决方法列出来

一、LargeList当inverted为true的时候,快速滑动有可能回弹到原方位 解决方法: 找到react native spring scrollview\android\src\main\java\com\bolan9999\SpringScrollView.java 第154行 if (inverted && Build.VERSION.SDK_INT >= 28) { vx = -vx; vy = -vy; } 把这段注释掉

二、如果用自定义PanResponder来控制LargeList滑动,scrollTo的animated为false时滑动不了 解决方法: 找到react-native-spring-scrollview/android/src/main/java/com/bolan9999/SpringScrollView.java 找到scrollTo() ①添加int duration = 150; //这个150看你实际情况,没这需求就原来默认的500 ②把 if(!animated){ moveToOffset(x, y); return; } 改成 if(!animated){ duration = 0; } ③下面DecelerateAnimation的最后500改成duration

三、当每个item的高度就是屏幕高度,每个item都有一个react-native-video, 如果出现每个视频的宽高比例各不相同的情况, 那么在滚动的时候,下一个要展示的视频,它的宽高比例会被前一个已回收item里的视频的宽高比例替代。 这个问题不是LargeList的,但又有关联,因为video这种复杂组件内部是有各种state的,而recycle类的列表都要求组件不能带state。然后大佬在3.0.14版本加了拒绝复用可以避免这个问题出现,但是拒绝复用后很快就会crash,特别是那些性能低的手机上。 解决方法: 我现在解决方法是加个状态,没到这个item出场的时候item高度为0,轮到他出场的时候再恢复实际高度。 如果有更好的方法请各位大佬指点迷津,蟹蟹。。

jishuxx commented 3 years ago

请问有尝试过采用ScrollView替代SpringScrollView么?目前发现替代后,在低端机,快速滑动时,白屏明显。

bolan9999 commented 3 years ago

在调试,SpringScrollView已经发布了,优化了滑动的一些细节问题。

bolan9999 commented 3 years ago

inverted这样写是在某些低安卓版本中存在兼容性问题,这个问题在V3.1.0-rc.1已经解决。

高度不等的情况确实存在一些问题。高度相等或者差不多的还是很好搞的,参见最新版本:https://bolan9999.github.io/react-native-largelist/#/zh-cn/V3/BigMedia