Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

有很大几率,无法触发下拉 #7

Closed
liu-xinhui opened this issue May 19, 2024 · 30 comments
Closed

有很大几率,无法触发下拉 #7

liu-xinhui opened this issue May 19, 2024 · 30 comments
Labels
bug Something isn't working

Comments

@liu-xinhui
Copy link

看视频,多拉几次,有时候就会导致无论怎么拉都无法触发刷新,必须松开手再次尝试才可以。

638_1716118562.mp4
@jenly1314
Copy link
Owner

看视频,多拉几次,有时候就会导致无论怎么拉都无法触发刷新,必须松开手再次尝试才可以。

638_1716118562.mp4

我测试是正常的;有更详细的重现步骤说明吗?

@liu-xinhui
Copy link
Author

我这个小米手机,其他手机未测试。其中一个重现步骤是:
下拉后别释放,用手给他推回去,再次下拉几乎100%无法再次下拉,全程手指不能离开屏幕。

@liu-xinhui
Copy link
Author

并且不能下拉之后,手指离开屏幕,立即再次下拉也是不行的,必须延迟一下,再尝试下拉才可以

@liu-xinhui
Copy link
Author

你看我新视频,下拉后推回去,只要手指不松开,或者松开后立即下拉(视频中手指松开好几次)。都是无法再次触发下拉刷新。

639_1716170817.mp4

@jenly1314
Copy link
Owner

按照你的描述进行操作,依然无法复现;

确认一下你测试时的两个关键信息,便于分析原因。

  1. 是否是下载演示App进行测试的?
  2. 所使用的机型与Android系统版本?

@liu-xinhui
Copy link
Author

1.使用的是演示app
2.机型是红米Turbo 3,系统是澎湃os1.1.11.0,android14
image
image

@liu-xinhui
Copy link
Author

感觉是缩放动画引起的,在这个手机上LazyColumn,拖曳时会有微小的上下缩放效果,只要这个缩放效果出现,就无法下拉。

@jenly1314
Copy link
Owner

感觉是缩放动画引起的,在这个手机上LazyColumn,拖曳时会有微小的上下缩放效果,只要这个缩放效果出现,就无法下拉。

初步判定可能是手机兼容性问题,因为我怎么上下乱滑都无法出现你说的情况;所以还需要再确认下,你可以换其他的手机试试,我抽空也找个小米的手机试试。(记得MIUI是好像有个列表回弹的效果。)

@liu-xinhui
Copy link
Author

liu-xinhui commented May 21, 2024

模拟器中也可以复现,android 14

642_1716275962.mp4
企业微信20240521-152401@2x

@jenly1314
Copy link
Owner

感觉是缩放动画引起的,在这个手机上LazyColumn,拖曳时会有微小的上下缩放效果,只要这个缩放效果出现,就无法下拉。

换个手机已复现此问题;这个细节很重要,你猜的没错,就这个引起的。

@jenly1314 jenly1314 added the bug Something isn't working label May 22, 2024
@jenly1314
Copy link
Owner

已修改此问题,你可以下载最新的演示App进行验证。

@liu-xinhui
Copy link
Author

试过了,现在没问题了,什么时候发布到maven仓库呢

@yqz0203
Copy link

yqz0203 commented Jun 5, 2024

我也遇到了,也是有弹性,有什么办法解决吗?

@yqz0203
Copy link

yqz0203 commented Jun 5, 2024

CompositionLocalProvider(
LocalOverscrollConfiguration provides null
) {
}

禁用边界滚动完美解决

@liu-xinhui
Copy link
Author

liu-xinhui commented Jun 6, 2024

CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }

禁用边界滚动完美解决

确实,这个方法完美解决。修复后的版本还是有一定几率无法触发下拉刷新的,只是我试了其他app也都有同样的问题,比如今日头条。所以就没提。用了你这个办法,可以100%触发下拉,非常感谢。

@jenly1314
Copy link
Owner

CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }
禁用边界滚动完美解决

确实,这个方法完美解决。修复后的版本还是有一定几率无法触发下拉刷新的,只是我试了其他app也都有同样的问题,比如今日头条。所以就没提。用了你这个办法,可以100%触发下拉,非常感谢。

  1. 按照之前的步骤能复现么?
  2. 如果需要用到LocalOverscrollConfiguration 解决的话,我抽空看下OverscrollConfiguration 的默认配置。

@liu-xinhui
Copy link
Author

按照之前的步骤是不行的,复现方式只有快速下滑,然后快速上滑,多次尝试肯定能复现无法下拉。这个很多app都有这个问题,不单是UltraSwipeRefresh。套上CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }可以解决这个问题。

@jenly1314
Copy link
Owner

按照之前的步骤是不行的,复现方式只有快速下滑,然后快速上滑,多次尝试肯定能复现无法下拉。这个很多app都有这个问题,不单是UltraSwipeRefresh。套上CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }可以解决这个问题。

我抽空看下OverscrollConfiguration相关源码,找下具体原因,加上 CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { } 能解决是因为直接把传递到内部的 OverscrollConfiguration 相关的配置直接给干掉了。

@jenly1314
Copy link
Owner

按照之前的步骤是不行的,复现方式只有快速下滑,然后快速上滑,多次尝试肯定能复现无法下拉。这个很多app都有这个问题,不单是UltraSwipeRefresh。套上CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }可以解决这个问题。

我抽空看下OverscrollConfiguration相关源码,找下具体原因,加上 CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { } 能解决是因为直接把传递到内部的 OverscrollConfiguration 相关的配置直接给干掉了。

看了下源码的大概流程,目前得出如下结论:

  1. 通过:Modifier.overscroll(overscrollEffect) 来禁用这种边界过渡滚动效果理论上是可行的;
  2. 也找到了使用 CompositionLocalProvider(LocalOverscrollConfiguration provides null) { } 能解决边界滚动的关键点:AndroidOverscroll.android.kt#L67;(方式2更彻底)

至于最后怎么处理,还需等我先复现并验证此问题后,再看是否有必要内置方式2。

@jenly1314 jenly1314 reopened this Jun 7, 2024
@jenly1314
Copy link
Owner

按照之前的步骤是不行的,复现方式只有快速下滑,然后快速上滑,多次尝试肯定能复现无法下拉。这个很多app都有这个问题,不单是UltraSwipeRefresh。套上CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }可以解决这个问题。

我抽空看下OverscrollConfiguration相关源码,找下具体原因,加上 CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { } 能解决是因为直接把传递到内部的 OverscrollConfiguration 相关的配置直接给干掉了。

看了下源码的大概流程,目前得出如下结论:

  1. 通过:Modifier.overscroll(overscrollEffect) 来禁用这种边界过渡滚动效果理论上是可行的;
  2. 也找到了使用 CompositionLocalProvider(LocalOverscrollConfiguration provides null) { } 能解决边界滚动的关键点:AndroidOverscroll.android.kt#L67;(方式2更彻底)

至于最后怎么处理,还需等我先复现并验证此问题后,再看是否有必要内置方式2。

  1. 昨天抽空测试了下,按照后面说的这样操作,无法复现;
  2. 麻烦帮测试下:如果使用默认的SwipeRefreshHeader 是否有同样的问题?(对应的示例:SwipeRefreshIndicatorSample

@liu-xinhui
Copy link
Author

我这边是可以很容易复现,你手机是不是比较老,可能新手机比较容易复现。每一种下拉都可以很容易复现,包括SwipeRefreshIndicatorSample。我拍个视频你看看

@liu-xinhui
Copy link
Author

可以100%复现

675_1718073391.mp4

@liu-xinhui
Copy link
Author

liu-xinhui commented Jun 11, 2024

676_1718073529.mp4

重新录了一个有声音的

@jenly1314
Copy link
Owner

我这边是可以很容易复现,你手机是不是比较老,可能新手机比较容易复现。每一种下拉都可以很容易复现,包括SwipeRefreshIndicatorSample。我拍个视频你看看

那换成使用google的SwipeRefresh是否存在同样的问题呢?

@jenly1314
Copy link
Owner

我这边是可以很容易复现,你手机是不是比较老,可能新手机比较容易复现。每一种下拉都可以很容易复现,包括SwipeRefreshIndicatorSample。我拍个视频你看看

那换成使用google的SwipeRefresh是否存在同样的问题呢?

优化了一些细节,并补充了关于google的SwipeRefresh示例;可以下载 演示App 测下 UltraSwipeRefresh 和 google的SwipeRefresh示例是否都存在此问题?

@liu-xinhui
Copy link
Author

我这边是可以很容易复现,你手机是不是比较老,可能新手机比较容易复现。每一种下拉都可以很容易复现,包括SwipeRefreshIndicatorSample。我拍个视频你看看

那换成使用google的SwipeRefresh是否存在同样的问题呢?

优化了一些细节,并补充了关于google的SwipeRefresh示例;可以下载 演示App 测下 UltraSwipeRefresh 和 google的SwipeRefresh示例是否都存在此问题?

google的SwipeRefresh已测试,有同样的问题。看视频。

692_1718542399.mp4

@jenly1314
Copy link
Owner

我这边是可以很容易复现,你手机是不是比较老,可能新手机比较容易复现。每一种下拉都可以很容易复现,包括SwipeRefreshIndicatorSample。我拍个视频你看看

那换成使用google的SwipeRefresh是否存在同样的问题呢?

优化了一些细节,并补充了关于google的SwipeRefresh示例;可以下载 演示App 测下 UltraSwipeRefresh 和 google的SwipeRefresh示例是否都存在此问题?

google的SwipeRefresh已测试,有同样的问题。看视频。

692_1718542399.mp4

好的,既然如此,那我抽空改下:向OverscrollConfiguration妥协了;

这里附上 SwipeRefresh的对应Issue#1059记录下,便于后续查看;虽是已关闭状态,但并未真正解决。

@liu-xinhui
Copy link
Author

SwipeRefresh的对应Issuehttps://github.com/google/accompanist/issues/1059记录下
SwipeRefresh这个居然设置了30天无人讨论自动关闭,这不是不想改bug吗

@jenly1314
Copy link
Owner

SwipeRefresh的对应Issuehttps://github.com/google/accompanist/issues/1059记录下 SwipeRefresh这个居然设置了30天无人讨论自动关闭,这不是不想改bug吗

存在即合理。

@jenly1314
Copy link
Owner

已修改,如需验证,可下载 演示App;如需提前使用,可参见:待发布版本

@jenly1314 jenly1314 mentioned this issue Jul 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants