java - 滚动 RecyclerView 时出现滞后/错误的 y 坐标(OnscrollListener)

标签 java android android-actionbar android-recyclerview toolbar

我正在努力解决 RecyclerView.OnscrollListener 和 onscrolled-Method 的滞后问题。 (我想在滚动列表时隐藏工具栏/操作栏 - 没有协调器布局)

当我“快速”滚动时,我从 onScrolled-Method 收到的数字是正确的。但是当我慢慢滚动列表时,我在 y 轴上收到一些“跳跃”。

这是一个已知问题还是我做错了什么? 有人有这方面的经验吗?

使用的监听器如下: https://github.com/mzgreen/HideOnScrollExample/blob/master/app/src/main/java/pl/michalz/hideonscrollexample/listener/parttwo/HidingScrollListener.java

我在 Android Studio 中得到的日志(您可以在其中看到跳转)是:

    01-13 17:21:33.611 D/Ilias: Offset: 0 *** dx: 0 *** dy: 9 *** totalScrolled: 0
    01-13 17:21:33.631 D/Ilias: Offset: 9 *** dx: 0 *** dy: 28 *** totalScrolled: 9
    01-13 17:21:33.641 D/Ilias: Offset: 37 *** dx: 0 *** dy: -5 *** totalScrolled: 37
    01-13 17:21:33.691 D/Ilias: Offset: 32 *** dx: 0 *** dy: -22 *** totalScrolled: 32
    01-13 17:21:33.701 D/Ilias: Offset: 10 *** dx: 0 *** dy: 10 *** totalScrolled: 10
    01-13 17:21:33.711 D/Ilias: Offset: 20 *** dx: 0 *** dy: 29 *** totalScrolled: 20
    01-13 17:21:33.731 D/Ilias: Offset: 49 *** dx: 0 *** dy: -2 *** totalScrolled: 49
    01-13 17:21:33.751 D/Ilias: Offset: 47 *** dx: 0 *** dy: -19 *** totalScrolled: 47
    01-13 17:21:33.761 D/Ilias: Offset: 28 *** dx: 0 *** dy: 11 *** totalScrolled: 28
    01-13 17:21:33.781 D/Ilias: Offset: 39 *** dx: 0 *** dy: 28 *** totalScrolled: 39
    01-13 17:21:33.801 D/Ilias: Offset: 67 *** dx: 0 *** dy: -4 *** totalScrolled: 67
    01-13 17:21:33.811 D/Ilias: Offset: 63 *** dx: 0 *** dy: -23 *** totalScrolled: 63
    01-13 17:21:33.831 D/Ilias: Offset: 40 *** dx: 0 *** dy: 7 *** totalScrolled: 40
    01-13 17:21:33.851 D/Ilias: Offset: 47 *** dx: 0 *** dy: 25 *** totalScrolled: 47
    01-13 17:21:33.861 D/Ilias: Offset: 72 *** dx: 0 *** dy: -7 *** totalScrolled: 72
    01-13 17:21:33.881 D/Ilias: Offset: 65 *** dx: 0 *** dy: -24 *** totalScrolled: 65
    01-13 17:21:33.901 D/Ilias: Offset: 41 *** dx: 0 *** dy: 9 *** totalScrolled: 41
    01-13 17:21:33.921 D/Ilias: Offset: 50 *** dx: 0 *** dy: 26 *** totalScrolled: 50
    01-13 17:21:33.931 D/Ilias: Offset: 76 *** dx: 0 *** dy: -8 *** totalScrolled: 76
    01-13 17:21:33.951 D/Ilias: Offset: 68 *** dx: 0 *** dy: -24 *** totalScrolled: 68
    01-13 17:21:33.971 D/Ilias: Offset: 44 *** dx: 0 *** dy: 9 *** totalScrolled: 44
    01-13 17:21:33.981 D/Ilias: Offset: 53 *** dx: 0 *** dy: 26 *** totalScrolled: 53
    01-13 17:21:34.001 D/Ilias: Offset: 79 *** dx: 0 *** dy: -6 *** totalScrolled: 79
    01-13 17:21:34.021 D/Ilias: Offset: 73 *** dx: 0 *** dy: -23 *** totalScrolled: 73
    01-13 17:21:34.031 D/Ilias: Offset: 50 *** dx: 0 *** dy: 11 *** totalScrolled: 50
    01-13 17:21:34.051 D/Ilias: Offset: 61 *** dx: 0 *** dy: 29 *** totalScrolled: 61
    01-13 17:21:34.071 D/Ilias: Offset: 90 *** dx: 0 *** dy: -5 *** totalScrolled: 90
    01-13 17:21:34.081 D/Ilias: Offset: 85 *** dx: 0 *** dy: -23 *** totalScrolled: 85
    01-13 17:21:34.101 D/Ilias: Offset: 62 *** dx: 0 *** dy: 11 *** totalScrolled: 62
    01-13 17:21:34.121 D/Ilias: Offset: 73 *** dx: 0 *** dy: 31 *** totalScrolled: 73
    01-13 17:21:34.131 D/Ilias: Offset: 104 *** dx: 0 *** dy: -3 *** totalScrolled: 104
    01-13 17:21:34.151 D/Ilias: Offset: 101 *** dx: 0 *** dy: -23 *** totalScrolled: 101
    01-13 17:21:34.171 D/Ilias: Offset: 78 *** dx: 0 *** dy: 37 *** totalScrolled: 78
    01-13 17:21:34.181 D/Ilias: Offset: 115 *** dx: 0 *** dy: 34 *** totalScrolled: 115
    01-13 17:21:34.201 D/Ilias: Offset: 149 *** dx: 0 *** dy: 13 *** totalScrolled: 149
    01-13 17:21:34.261 D/Ilias: Offset: 162 *** dx: 0 *** dy: 33 *** totalScrolled: 162
    01-13 17:21:34.271 D/Ilias: Offset: 195 *** dx: 0 *** dy: 4 *** totalScrolled: 195
    01-13 17:21:34.281 D/Ilias: Offset: 199 *** dx: 0 *** dy: 5 *** totalScrolled: 199
    01-13 17:21:34.301 D/Ilias: Offset: 204 *** dx: 0 *** dy: 3 *** totalScrolled: 204
    01-13 17:21:34.321 D/Ilias: Offset: 207 *** dx: 0 *** dy: 2 *** totalScrolled: 207
    01-13 17:21:34.341 D/Ilias: Offset: 209 *** dx: 0 *** dy: 2 *** totalScrolled: 209
    01-13 17:21:34.351 D/Ilias: Offset: 211 *** dx: 0 *** dy: 1 *** totalScrolled: 211

希望你能帮助我!

谢谢

最佳答案

好的,我发现问题了。

我的特殊问题是基于 Recyclerview 的“相对”y 轴坐标值。我解释一下:

我们的 Activity 顶部有一个工具栏。 我们带有 recyclerView 的 fragment 位于工具栏“下方”。

因此在我们的例子中,工具栏的初始高度为 224px。 每次在 OnscrollListener 中调用“onMoved”时,我们都会减小工具栏的高度,并相应地设置滚动距离的平移。

那么,这里发生了什么? 随着每次减小工具栏高度的迭代,recyclerView 的“高度”都会增加。因此,如果我们在顶部增加 RecyclerView,那么 500 px 高度的 RecyclerView(例如)的 y 坐标当然不是​​相同的 y 坐标。

    ________________   
1  | Toolbar        | 
2  |                | height: 200px
3  |________________|  
1  | RecyclerView   |  
2  |                |  
3  |                |  <---- y-coordinate of the recyclerView
4  |                |        at this point: 256 (for example)
5  |                |  
6  |                |  
7  |                |  
8  |                |
9  |                |
10 |________________|  


    ________________ 
1  | Toolbar        | 
2  |________________|  
1  | RecyclerView   |  
2  |                |  
3  |                |  
4  |                |  <---- y-coordinate of the recyclerView
5  |                |        at this point: 380 (for example)
6  |                |  
7  |                |  
8  |                |  
9  |                |
10 |                |
11 |________________|  

也许这会对你将来的某个人有所帮助:)

关于java - 滚动 RecyclerView 时出现滞后/错误的 y 坐标(OnscrollListener),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34773595/

相关文章:

android - 带有滑动操作栏的抽屉布局,如 facebook

android - 将 ShowcaseView 与 v7 appcompat ActionBar 一起使用

java - 尝试将特定的库打包到我的 jar 中,但不起作用

java - 在 getclass() 方法之后转换对象

java - 具有数组类型的 getClass 方法 Java

android - 卸载密码

Android无法检测屏幕旋转

java - 使用 convertView 和自定义数据 listView 时出现 NullPointerException

android - 如何删除溢出菜单 3 点?

java - 如何通过在java中使用mysql数据库选择来增加我的主键