xiwenhec / Banner

android广告轮播控件
58 stars 21 forks source link

快速滑动导致的卡死 #3

Open FTExplore opened 7 years ago

FTExplore commented 7 years ago

在部分手机上,同方向快速滑动,会导致banner卡住,必现(小米note) 目前的解决方案是降低banner的滑动速度,目测150毫秒就没有卡顿了

xiwenhec commented 7 years ago

你好,出现的卡顿现象,是因为,当页面滚动到最后一个条目边缘映射(映射的第一个条目)完成时,控件会瞬间设置到真实的第一个条目,因为映射的条目并不是真正意义上的viewpager中的一部分,此时不响应手指触摸连续事件。

FTExplore commented 7 years ago

if (state == ViewPager.SCROLL_STATE_IDLE && (position == 0 || position == mAdapter.getCount() - 1)) { setCurrentItem(realPosition, false); } 是这段代码吧,瞬间设置真实的第一个条目,或者最后一个条目,但是卡顿的现象发生在真实第一个条目与真实第二个条目之间。此时instantItem 被调用了三次

xiwenhec commented 7 years ago

你好,重新查阅了代码,并没有发现卡死现象,当app:banner_pageChangeDuration设置比较大时,手指快速滑动,会出现卡顿的假象,这个现象的原因是因为,当个页面没有切换完成,不会快速响应下一个页面,建议将这个参数设置到500以下,对于instantItem 被调用了三次,这个问题是正常的,这个是viewPager的预加载模式,当滑动到最后一个映射条目时然后切换到真实的第一个条目时,此时有三个条目需要生成,一个是本身的条目,一个是第二个条目,还有一个是映射的最后一个条目。

FTExplore commented 7 years ago

嗯嗯,我最近也在想,有没有办法可以在app:banner_pageChangeDuration 比较大的时候,也能顺畅

xiwenhec commented 7 years ago

最近看到了一个不错的方案,正在考虑试一下,看看能不能解决,同样,我觉得这个写法的定制行不够好,具备将banner的布局id自定义传递进去,使用ViewHolder的思想,重写一下,欢迎多提提建议。