时间:2021-05-20
最近有个需求 要求列表 滑动后第一条 需要和顶部对齐
上网找了找 发现 官方支持 Recycle +LinearSnapHelper 可以实现
但我实际操作加上后 发现会卡顿 滑动卡顿 没有以前那种流畅感了
想了想 算了 懒得看源码 还是自己写一个得了
效果图 :
代码如下 注释很清楚了
package com.example.testapp import androidx.appcompat.app.AppCompatActivityimport android.os.Bundleimport androidx.recyclerview.widget.LinearLayoutManagerimport androidx.recyclerview.widget.RecyclerViewimport com.example.testapp.code.note.JoinDataimport com.example.testapp.code.note.TheatreJoinerAdapterimport kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { //isUserControl 表示是否是 第二次定位滑动 @Volatile private var isUserControl = false var runnable = Runnable { smoothScrollToPosition()//处理rcy定位 } val list = arrayListOf<JoinData>() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) for (i in 0..50) { list.add(JoinData("小名${i}", i)) } rcy.layoutManager = LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false) var adapter = TheatreJoinerAdapter(this, list) rcy.adapter = adapter rcy.addOnScrollListener(object : RecyclerView.OnScrollListener() { override fun onScrolled(r: RecyclerView, dx: Int, dy: Int) { super.onScrolled(r, dx, dy) //判断是否是自动滚动 if (r.scrollState == RecyclerView.SCROLL_STATE_SETTLING && !isUserControl) {//自动滚动 //滚动幅度 在 -3 .. 3以内 其实时接近停止了 慢速滑动了 这时我们让他停止 if (dy in -3..3) {//向下滚动 r.stopScroll() } } } override fun onScrollStateChanged(r: RecyclerView, newState: Int) { super.onScrollStateChanged(r, newState) if (newState == RecyclerView.SCROLL_STATE_IDLE) {//滑动停止 if (!isUserControl) { rcy.postDelayed(runnable, 200)//200 毫秒延时任务 } } if (r.scrollState != RecyclerView.SCROLL_STATE_SETTLING) {//非自动滑动 isUserControl = false } } }) } private fun smoothScrollToPosition() { isUserControl = true val stickyInfoView = rcy.getChildAt(0) //获取头部View 第一个view val bottom = stickyInfoView.bottom//获取view底部到rcy的顶部高度 val height = stickyInfoView.measuredHeight//获取view高度 if (bottom != height) {//去除正好停在正好的位置的情况 if (bottom >= (height / 2)) {//判断view在上一半还是在下一半 rcy.smoothScrollBy(0, -(height - bottom))//二次滑动 } else { rcy.smoothScrollBy(0, bottom)//二次滑动 } } }}结束
到此这篇关于Android RecycleView滑动停止后自动吸附效果的实现代码(滑动定位)的文章就介绍到这了,更多相关Android RecycleView滑动定位内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
公司项目要实现这个效果:Android实现Recycleview悬浮粘性头部外加右侧字母导航图一是开始的画面,图二是滑动的画面,点击右侧字母需要滑动左侧到指定位
Android开发仿IOS滑动开关实现代码Android与iOS相比,ios好多控件都是自带的,而android需要使用自定义来实现。今天说的是ios的滑动开关
本文实例为大家分享了Android实现View滑动效果的具体代码,供大家参考,具体内容如下一、View的滑动简介View的滑动是Android实现自定义控件的基
本文实例为大家分享了Android自定义SeekBar滑动显示数字的具体代码,供大家参考,具体内容如下先来上个效果图:当滑动时:数值显示,滑动停止时显示数字,使
本文为大家分享了AndroidViewPager实现图片滑动预览效果展示的具体代码,供大家参考,具体内容如下效果图:滑动前:滑动后:代码非常简单,实现起来很容易