【问题标题】:How to calculate speed of recyclerView inside NestedScrollView in Android如何计算 Android 中 NestedScrollView 内的 recyclerView 的速度
【发布时间】:2020-05-20 13:24:11
【问题描述】:

我在 NestedScrollView 中有 recyclerView。我想计算 recyclerview 的速度,但它在nestedScrollView 中不起作用。

这是计算滚动速度的代码,它在没有 NestedScrollView 的情况下工作。我也想让它与 NestedScrollView 一起使用。

我已将嵌套滚动设置为 false,但它不起作用

recyclerView.setNestedScrollingEnabled(false)

类:

abstract class ScrollSpeedRecycleViewScrollListener(private val maxScrollSpeedForAdInjection: Int) :
    RecyclerView.OnScrollListener() {

  
    var currentScrollSpeed: Int = 0

    private var previousFirstVisibleItem = 0
    private var previousEventTime: Long = 0

    override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
        super.onScrolled(recyclerView, dx, dy)

        val layoutManager = recyclerView.layoutManager

        if (layoutManager is LinearLayoutManager) {
            val firstItemPosition = layoutManager.findFirstVisibleItemPosition()

            if (previousFirstVisibleItem != firstItemPosition) {
              
            }
        }
    }

    override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
        super.onScrollStateChanged(recyclerView, newState)

        when (newState) {
            RecyclerView.SCROLL_STATE_IDLE -> {
                if (currentScrollSpeed > maxScrollSpeedForAdInjection) {
                    listNeedsRefresh()
                }
                currentScrollSpeed = 0
            }
        }
    }

}

【问题讨论】:

    标签: android android-recyclerview android-nestedscrollview


    【解决方案1】:

    速度的概念涉及一定时间段内的距离。您可以使用 onScrolled 方法中的 dx 或 dy 获取滚动的值(距离)。要获得时间,您需要在获取距离值的点获取一些时间戳,然后使用speed = distance / time 的计算。但是您还需要计算 onScrolled 调用之间的差异。所以它实际上最终会是

    speed = (distance2 - distance1) / (time2 - time1)

    您将在这里遇到的问题是,当用户快速滚动时,该方法将被调用加载,并且每次都需要进行计算,这将对平滑度产生不利影响滚动。

    我敢打赌,有更好的方法可以解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 2017-05-28
      • 1970-01-01
      • 2019-06-14
      相关资源
      最近更新 更多