RecyclerView 中item滑动到制定的位置

最近工作比较忙,很久没有写博客了,今天来记录一下recyclerView中item的滑动。

一、在recyclerView中,滑动有几种方法

1. scrollBy(int x, int y) 

这个可以滑动一定的像素,没有滑动动画

2. smoothscrollBy(int x, int y) 

这个可以滑动一定的像素,有滑动动画

3.scrollToPosition(int position) 

滑动到一定的position,没有滑动效果

4. smoothScrollToPosition(int position) 

滑动到一定的position,有滑动效果

 

二、本次项目我用的是smoothscrollBy(int x, int y) ,具体用法如下

在需要滑动的时候,调用initNormalItemPositon()方法,index是需要滑动的item的position,计算出需要滑动的item的距离。

fun initNormalItemPosition() {
        val currentVideo = (parentFragment as? VideoPlayListener)?.getCurrentPlayVideo()
        var index = normalVideoData?.indexOfFirst { it.id == currentVideo?.id } ?: return
        if (index != -1) {
            recycler_view.smoothScrollBy(getPositionXDistance(index, recycler_view) - getScrollXDistance(recycler_view), 0)
        } else {
            recycler_view.smoothScrollBy(getPositionXDistance(0, recycler_view) - getScrollXDistance(recycler_view), 0)
        }
    }

 

private fun getPositionXDistance(position: Int, view: View): Int {
        val itemWidth = context!!.dp2px(140f + 9)
        return itemWidth * position - ((view as? RecyclerView)?.width!! - context!!.dp2px(140f)) / 2
    }
private fun getScrollXDistance(view: View): Int {
        val layoutManager = (view as? RecyclerView)?.layoutManager as LinearLayoutManager
        var position = layoutManager.findFirstVisibleItemPosition()
        if (position < 0) {
            return 0
        }
        val firstVisibleChildView = layoutManager.findViewByPosition(position)
        val itemWidth = context!!.dp2px(140f + 9)
        return position * itemWidth - (firstVisibleChildView?.left ?: 0)
    }

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值