Android:RecyclerView实现横向滑动接近中间的Item居中效果

这个效果有点一言难尽,上个图吧。

 

就是这个效果:当某个item移动到屏幕中间的时候停止滑动这个item会自动滑动向中间。

 

有点像画廊那个效果,但是画廊的图片比较大。

 

 

 

那么该如何实现的呢?

刚开始我是自己计算的:

  override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
                super.onScrollStateChanged(recyclerView, newState)
                if(newState==0&&isScroll){
                    isScroll=false
                    val right=recyclerView.right
                    val left=recyclerView.left
                    val recyclerViewCenter=(left+right)/2

                    var lastViewItemOffset=99999
                    var lastView:View?=null
                    for (item in adapter.itemViews) {
                        val cRight=item.right
                        val cLeft=item.left
                        val cCenter=(cLeft+cRight)/2+cLeft
                        val itemOffset= abs(recyclerViewCenter-cCenter)
                        if(lastViewItemOffset>itemOffset){
                            lastViewItemOffset=itemOffset
                            lastView=item
                        }

                    }

                    if(lastView!=null){
                        val cRight=lastView.right
                        val cLeft=lastView.left
                        val cCenter=(cRight-cLeft)/2+cLeft
                        val centerOffset=recyclerViewCenter-cCenter
                        Log.d("centerOffset"," ${lastView.left}    ${lastView.right}   $centerOffset    $recyclerViewCenter")

                        recyclerView.smoothScrollBy(centerOffset,0)
                    }
                }
                Log.d("onScrollStateChanged","$newState   ${adapter.itemViews[1].left}    ${adapter.itemViews[1].right}")

            }

后来发现直接就有个方法可以用:

 

  recyclerView.layoutManager =
            LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false)
        LinearSnapHelper().attachToRecyclerView(recyclerView)

直接使用LinearSnapHelper就可以达到这个效果...

 

使用androidx的朋友,直接就可以使用了。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值