在 recyclerview 项目之间滑动

Posted

技术标签:

【中文标题】在 recyclerview 项目之间滑动【英文标题】:Sliding between recyclerview items 【发布时间】:2021-11-21 15:36:52 【问题描述】:

我需要做这样的事情

当我滑动或选择第三个选项或第一个选项时,视图应该变成这样

我尝试使用线性布局,当我滑动时,我在运行时添加了边距,但它看起来不太好,有人可以建议我一些实现此目的的好主意吗?

【问题讨论】:

你试过 scaleX 和 scaleY 吗? 【参考方案1】:

如果你想通过类似 LinearLayout 和 ImageView 来实现它,你可以改变 ImageView 的 margin 或 padding。 但是出于这个原因,有一些有用的库。

像这样: 你可以在这里找到它: https://guides.codepath.com/android/Bottom-Navigation-Views

此外,您还可以在此处找到其他一些第三方库: https://camposha.info/android-examples/android-bottom-navigation-libraries/

希望对你有帮助

【讨论】:

【参考方案2】:

我认为在您的情况下,最好使用 ViewPager 并添加 ‍‍Transformer 来调整所选项目的大小和动画。 这是我的ViewPager 示例:

在您的xml 文件中:

<androidx.viewpager2.widget.ViewPager2
                android:id="@+id/viewPager"
                visibility="@!loading"
                android:layout_
                android:layout_
                android:clipChildren="false"
                android:clipToPadding="false"
                android:paddingStart="40dp"
                android:paddingEnd="40dp" />

这是您的fragment/activity 用于配置ViewPager

binding.viewPager.apply 
            offscreenPageLimit = 100
            val transformer = CompositePageTransformer()
            transformer.addTransformer(MarginPageTransformer(PixelUtil.dpToPx(20f)))
            transformer.addTransformer  page, position ->
                run 
                    val r = 1 - abs(position)
                    page.scaleY = 0.85f + r * 0.15f
                
            
            setPageTransformer(transformer)

            registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback()
                override fun onPageSelected(position: Int) 
                    viewModel.currentPosition.value = position
                    super.onPageSelected(position)
                
            )
        

这里是设置AdapterViewPager

val simpleAdapter = ModelsListAdapter(models)  onClick() 
binding.viewPager.adapter = simpleAdapter

适配器应该是这样的:

class ModelsListAdapter(private val list: ArrayList<Model>,val itemClick:() -> (Unit))
    : RecyclerView.Adapter<ModelViewHolder>() 

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ModelViewHolder 
        val inflater = LayoutInflater.from(parent.context)
        return ModelViewHolder(inflater, parent,itemClick)
    

    override fun onBindViewHolder(holder: ModelViewHolder, position: Int) 
        val movie: Model = list[position]
        holder.bind(movie)
    

    override fun getItemCount(): Int = list.size


【讨论】:

以上是关于在 recyclerview 项目之间滑动的主要内容,如果未能解决你的问题,请参考以下文章

RecyclerView smoothScroll位于中心位置。安卓

RecyclerView 与以编程方式创建的视图:哪个更好?

如何使用kotlin滑动删除存储在firestore中的recyclerview项目?

一次滑动一项Recyclerview [重复]

解决 RecyclerView AppBarLayout 滑动不顺畅的问题

安卓多个RecyclerView滑动与显示问题