Android RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位)
最近有個(gè)需求 要求列表 滑動(dòng)后第一條 需要和頂部對(duì)齊
上網(wǎng)找了找 發(fā)現(xiàn) 官方支持 Recycle + LinearSnapHelper 可以實(shí)現(xiàn)
但我實(shí)際操作加上后 發(fā)現(xiàn)會(huì)卡頓 滑動(dòng)卡頓 沒(méi)有以前那種流暢感了
想了想 算了 懶得看源碼 還是自己寫(xiě)一個(gè)得了
效果圖 :
代碼如下 注釋很清楚了
package com.example.testapp import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.example.testapp.code.note.JoinData import com.example.testapp.code.note.TheatreJoinerAdapter import kotlinx.android.synthetic.main.activity_main.* class MainActivity : AppCompatActivity() { //isUserControl 表示是否是 第二次定位滑動(dòng) @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) //判斷是否是自動(dòng)滾動(dòng) if (r.scrollState == RecyclerView.SCROLL_STATE_SETTLING && !isUserControl) {//自動(dòng)滾動(dòng) //滾動(dòng)幅度 在 -3 .. 3以?xún)?nèi) 其實(shí)時(shí)接近停止了 慢速滑動(dòng)了 這時(shí)我們讓他停止 if (dy in -3..3) {//向下滾動(dòng) r.stopScroll() } } } override fun onScrollStateChanged(r: RecyclerView, newState: Int) { super.onScrollStateChanged(r, newState) if (newState == RecyclerView.SCROLL_STATE_IDLE) {//滑動(dòng)停止 if (!isUserControl) { rcy.postDelayed(runnable, 200)//200 毫秒延時(shí)任務(wù) } } if (r.scrollState != RecyclerView.SCROLL_STATE_SETTLING) {//非自動(dòng)滑動(dòng) isUserControl = false } } }) } private fun smoothScrollToPosition() { isUserControl = true val stickyInfoView = rcy.getChildAt(0) //獲取頭部View 第一個(gè)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))//二次滑動(dòng) } else { rcy.smoothScrollBy(0, bottom)//二次滑動(dòng) } } } }
結(jié)束
到此這篇關(guān)于Android RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位)的文章就介紹到這了,更多相關(guān)Android RecycleView滑動(dòng)定位內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- android RecycleView實(shí)現(xiàn)下拉刷新和上拉加載
- Android之RecycleView實(shí)現(xiàn)指定范圍的拖動(dòng)效果
- Android 使用RecycleView列表實(shí)現(xiàn)加載更多的示例代碼
- android RecycleView實(shí)現(xiàn)多級(jí)樹(shù)形列表
- Android RecycleView實(shí)現(xiàn)Item拖拽效果
- Android RecycleView和線型布局制作聊天布局
- Android移動(dòng)開(kāi)發(fā)recycleView的頁(yè)面點(diǎn)擊跳轉(zhuǎn)設(shè)計(jì)實(shí)現(xiàn)
- Android使用NestedScrollView?內(nèi)嵌RecycleView滑動(dòng)沖突問(wèn)題解決
相關(guān)文章
Android 2d游戲開(kāi)發(fā)之貪吃蛇基于surfaceview
這篇文章主要介紹了Android 2d游戲開(kāi)發(fā)基于surfaceview的貪吃蛇,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09Android開(kāi)發(fā)之菜單(menu)用法實(shí)例分析
這篇文章主要介紹了Android開(kāi)發(fā)之菜單(menu)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android菜單的實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-03-03Android 使用Vitamio打造自己的萬(wàn)能播放器(2)—— 手勢(shì)控制亮度、音量、縮放
本文主要介紹Android Vitamio插件的一些功能,這里主要介紹 Android Vitamio插件的手勢(shì)控制亮度,音量,縮放的功能,并提供代碼實(shí)例,有需要的小伙伴可以參考下2016-07-07Flutter實(shí)現(xiàn)底部菜單導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了Flutter實(shí)現(xiàn)底部菜單導(dǎo)航,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-02-02Android第三方文件選擇器aFileChooser使用方法詳解
這篇文章主要介紹了Android第三方文件選擇器aFileChooser的使用方法詳解,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07Android將內(nèi)容分享到QQ和微信實(shí)例代碼
這篇文章主要介紹了Android將內(nèi)容分享到QQ和微信實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06解析android中隱藏與顯示軟鍵盤(pán)及不自動(dòng)彈出鍵盤(pán)的實(shí)現(xiàn)方法
本篇文章對(duì)android中隱藏與顯示軟鍵盤(pán)以及不自動(dòng)彈出鍵盤(pán)的方法進(jìn)行了分析介紹。需要的朋友參考下2013-05-05android APP登陸頁(yè)面適配的實(shí)現(xiàn)
這篇文章主要介紹了android APP登陸頁(yè)面適配的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-09-09