响应式轮播图代码(刚刚接触安卓使用viewflipper实现轮播图时遇到些问题,求大牛解救)

本文目录
刚刚接触安卓使用viewflipper实现轮播图时遇到些问题,求大牛解救
api上说,如果view注册了touch事件,则有可能会影响这个控件的onClick事件。为了解决和单击事件冲突:
1. 要给view注册touch事件。
2. 在touch中增加 case MotionEvent.ACTION_UP:
3. 调用一下view.performClick();。
react-native | 一起来实现一个高性能循环滚动的轮播图吧!
Hey,可以叫我Doho,我是一名前端开发,目前在我司负责一款由RN开发的App。
很兴奋和大家分享我在使用 react-native-reanimated 并制作 react-native-reanimated-carousel 中学习到的经验,由于 react-native-reanimated 的中文资料及介绍视频较少所以我的学习途径大多来自于 官方文档 、 油管上光头大哥的视频 这两个。
官方文档 内容大多是英文,所以查阅起来对英文不是很好的伙伴还是有一些障碍的。
油管上光头大哥的视频 大部分视频还是不错的,但部分视频的讲解部分有些跳跃所以也会存在有些地方难以跟上的情况。
所以我打算把我学习过的视频尝试重新实现一遍,并且用中文文章的方式进行产出,其实也是想锻炼下自己的总结能力,和文笔。后续会以文章或者视频系列的方式推送!~致敬 光头大哥
我的GitHub主页
我的Carousel开源库
Snack 演示
为什么选择Reanimated呢,因为在React Native中,默认情况下,所有更新都会至少延迟一帧,因为UI和JS线程之间的通信是异步的,UI线程永远不会等待JS线程处理完全所有事件。
而且除了JS在执行Diff、更新、执行应用程序的业务逻辑、处理网络请求…以外,事件通常也无法立即处理,从而导致会有更严重的延迟。
Reanimated的方式则是把处理动画和事件的逻辑从JSt线程放到UI线程去做。
大概是这样子,更细节的地方不是本文的重点,大家可以自行google~
受业务需求要在首页增加一个支持循环滚动的轮播图,所以在github上搜索了一下社区里使用比较好用的组件。排除掉一些四、五年前才更新过的库,还剩下一个名叫 react-native-snap-carousel 的组件库。
但在使用过程中发现了问题,在循环滚动中快速滑动时会出现卡顿的情况,情况看起来像是滚动到头部或者末尾时需要等待元素追加到指定位置。
因为时间问题,所以并没有深入去看源码的实现部分,中间通过社区里大家提到的各种办法进行了尝试也是无法解决,大多是通过增加前后的预渲染数量,但其实还是治标不治本的方式。
而且这个库的维护频率比较低,也堆积着大量未解决的问题,虽然README中有说到 未来 会有一个完全用 react-native-gesture-handler + react-native-reanimated 实现的版本,而且会非常好用。但距离他们宣布时间已经过去了很久还没有发布正式版,所以求人不如求己,自己撸一个吧,但误打误撞使用了和他们同样计划的库,就是上方的手势与动画库。
循环滚动时向一侧快速滑动不会出现卡顿的情况
包裹视图容器后可以通过回调来获得不同手势移动的参数。
一个简单的hook,用在 PanGestureHandler 的 onHandlerStateChange props上,可以在hook中设置onStart、onActive、onEnd…各种事件的响应事件。
Reanimated产生的动画值,它的变化将影响动画的行为。
Reanimated 需要使用 useAnimatedStyle 来生成 style ,因为它将在 SharedValue 变化时控制生成变化后的样式,同样他生成的样式也允许与 Reanimated.View 进行关联。
使用Reanimated动画值的基本条件,将 SharedValue 置入 useAnimatedStyle 后,可将返回的 style 传递给 styles 属性,即可使元素产生动画效果。
响应一个 SharedValue 值的变化,并产生一个只读的值。
使 SharedValue 产生一个映射,这在修改一个动画效果的时候非常有用,比方说我们有一个头像,想没登录的时候它宽度是100,登录后放大到200。
Types: interpolate(SharedValue,inputRange,outputRange,?ExtrapolateParameter)
SharedValue: 动画的值
inputRange: 输入区间
outputRange: 输出区间
ExtrapolateParameter?: 当输入区间溢出后,是否继续按照输出区间变化(可选)
这样我们就有了一个可以使用的初始项目,他将抹平我们后续可能会带来的各种依赖差异。
然后想让元素动起来,我们还需要两个步骤 生成偏移值X 、 使用偏移值X的元素 。
Carousel.tsx
useComputedAnim.ts
这里我们完成了 生成偏移值X 。
Carousel.tsx
Layouts.tsx
这里我们完成了 使用偏移值X的元素 ,现在我们的轮播图已经有了一个基本的样子,他已经可以朝着一侧进行滑动了,但如果想让他进行循环,则还需要完成 useOffsetX 中的逻辑。
这个方法内计算部分比较绕,但大概思路就是当偏移值X变化后,确认他是否超过我们所设定的边界,超过了就放到另一边。不理解也没关系,因为或许你可以理清思路实现一套自己的运算逻辑
useOffsetX.ts
本篇文章的完整版Demo react-native-reanimated-carousel-example
后续会在我的项目 react-native-reanimated-carousel 中完善更多的API,让这个组件变得更易用,但或许并不会增加 react-native-snap-carousel 中那样复杂的UI效果,目的还是让这个组件变得更加简单与灵活。
希望更多伙伴能参与进来一起维护,或者来提更多建议,来吧来吧!~ 项目
感谢大家的阅读,希望能收到建议、问题或指正。
觉得好用就来个star吧,嘻嘻 react-native-reanimated-carousel ,谢谢~!
后续我会写更多关于react-native-reanimated v2的系列文章,希望对大,家有所帮助! 我的GitHub主页

更多文章:
orlnsertbootmediinselected(我电脑开机显示这个是什么意思or insert boot media in select)
2026年10月10日 23:00
display的用法(display是什么意思 详解display的含义和用法)
2026年10月10日 22:00
html全部居中代码(怎么让网页居中显示,html如何让网页居中)
2026年10月10日 21:10
tcp ip四层网络模型(TCP IP参考模型共分为四层:( )、网络层、传输层、应用层)
2026年10月10日 15:20
sql server数据库管理系统是基于(MS-SQL 是甚麼)
2026年10月10日 14:40






