簡體   English   中英

第一項和最后一項的 SnapHelper 問題

[英]SnapHelper issue with first and Last item

我正在使用 Recyclerview 和 PageSnapHelper 來創建圖像輪播。

第一項 - 不居中<\/a>在此處輸入圖像描述<\/a>

第一個項目不居中,后續項目應該居中,我使用項目裝飾器實現了這一點。 RecyclerView 在嵌套的滾動視圖中。

問題:<\/strong>滾動不流暢,我已經覆蓋了 findTargetSnapPosition,第一次滾動時滾動了 2 個項目。

 override fun findTargetSnapPosition(layoutManager: RecyclerView.LayoutManager, velocityX: Int, velocityY: Int): Int {

    if (layoutManager !is RecyclerView.SmoothScroller.ScrollVectorProvider) {
        return RecyclerView.NO_POSITION
    }

    val currentView = findSnapView(layoutManager) ?: return RecyclerView.NO_POSITION

    val layoutManager = layoutManager as LinearLayoutManager

    val position1 = layoutManager.findFirstVisibleItemPosition()
    val position2 = layoutManager.findLastVisibleItemPosition()

    var currentPosition = layoutManager.getPosition(currentView)



    if (velocityX > 500) {
        currentPosition = position2
    } else if (velocityX < 500) {
        currentPosition = position1
    }

    return if (currentPosition == RecyclerView.NO_POSITION) {
        RecyclerView.NO_POSITION
    } else currentPosition

}

如果我說得對,您需要改寫 LinearSnapHelper,因為您的項目視圖沒有全屏顯示。 為了實現對第一個\/最后一個項目的關注,您需要在下一個方式覆蓋 findSnapView(請注意,此代碼段僅在 RecyclerView.layoutmanager 為 LinearLayoutManager 時適用):

fun RecyclerView.setLinearSnapHelper(isReversed: Boolean = false) {
object : LinearSnapHelper() {

    override fun findSnapView(layoutManager: RecyclerView.LayoutManager?): View? {
        val firstVisiblePosition = (layoutManager as LinearLayoutManager).findFirstCompletelyVisibleItemPosition()
        val lastVisiblePosition = layoutManager.findLastCompletelyVisibleItemPosition()
        val firstItem = 0
        val lastItem = layoutManager.itemCount - 1
        return when {
            firstItem == firstVisiblePosition -> layoutManager.findViewByPosition(firstVisiblePosition)
            lastItem == lastVisiblePosition -> layoutManager.findViewByPosition(lastVisiblePosition)
            else -> super.findSnapView(layoutManager)
        }
    }
}.apply { attachToRecyclerView(this@setLinearSnapHelper) }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM