亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位)

瀏覽:76日期:2022-09-21 18:33:26

最近有個(gè)需求 要求列表 滑動(dòng)后第一條 需要和頂部對(duì)齊上網(wǎng)找了找 發(fā)現(xiàn) 官方支持 Recycle + LinearSnapHelper 可以實(shí)現(xiàn)但我實(shí)際操作加上后 發(fā)現(xiàn)會(huì)卡頓 滑動(dòng)卡頓 沒有以前那種流暢感了

想了想 算了 懶得看源碼 還是自己寫一個(gè)得了

效果圖 :

Android RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位)

代碼如下 注釋很清楚了

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 表示是否是 第二次定位滑動(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以內(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)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 男女视频在线观看免费 | 成人免费福利网站在线看 | 久久精品国产精品亚洲艾 | 色综合久久91 | 欧美精品色精品一区二区三区 | 精品欧美日韩一区二区 | 欧美亚洲日本一区二区三区浪人 | 国产亚洲精品成人久久网站 | 国产一区二区精品久久91 | 国产成人影院在线观看 | avtom影院入口永久在线观看 | 成人做爰全过程免费看网站 | 国产精品1区2区 | avtt天堂网永久资源手机版 | 欧洲国产伦久久久久久久 | 欧美国产成人一区二区三区 | 美国三级| 国产成人综合洲欧美在线 | 亚洲精品不卡久久久久久 | 久久夜色精品国产噜噜亚洲a | 女人张开腿给男人捅 | 日韩三级黄色片 | 亚洲一区二区三区中文字幕 | 国产一区二区三区在线观看免费 | 日韩中文字幕在线亚洲一区 | 亚洲精品二区中文字幕 | 波多野结衣aⅴ在线 | 大焦伊人| 五月色一区二区亚洲小说 | 18视频网站在线观看 | 亚洲人成高清毛片 | 国产成人精品曰本亚洲78 | 成年人毛片视频 | 网站免费满18成年在线观看 | 中文字幕一区日韩在线视频 | 最新国产成人综合在线观看 | 国产高清美女一级a毛片久久w | 国产成人精品午夜二三区 | 国产成年人视频 | 99精品视频在线观看免费 | 爽爽日本在线视频免费 |