最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年10月30日 09:43:46   作者:叫我大紅領(lǐng)巾  
這篇文章主要介紹了Android RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

最近有個(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)于A(yíng)ndroid RecycleView滑動(dòng)停止后自動(dòng)吸附效果的實(shí)現(xiàn)代碼(滑動(dòng)定位)的文章就介紹到這了,更多相關(guān)Android RecycleView滑動(dòng)定位內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android中使用GridView進(jìn)行應(yīng)用程序UI布局的教程

    Android中使用GridView進(jìn)行應(yīng)用程序UI布局的教程

    GridView即平常我們見(jiàn)到的類(lèi)似九宮格的矩陣型布局,只不過(guò)默認(rèn)不帶分割線(xiàn),這里我們就從基礎(chǔ)開(kāi)始來(lái)看一下Android中使用GridView進(jìn)行應(yīng)用程序UI布局的教程
    2016-06-06
  • Android開(kāi)發(fā)筆記之:ListView刷新順序的問(wèn)題詳解

    Android開(kāi)發(fā)筆記之:ListView刷新順序的問(wèn)題詳解

    本篇文章是對(duì)Android中ListView刷新順序的問(wèn)題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • 解析Android框架之Volley源碼

    解析Android框架之Volley源碼

    我們知道Volley是在2013年Google I/O大會(huì)上推出了一個(gè)新的網(wǎng)絡(luò)通信框架,他的設(shè)計(jì)目的就是為了那些請(qǐng)求數(shù)據(jù)量不是特別大,但是又是特別頻繁的網(wǎng)絡(luò)操作非常適合。但是對(duì)于數(shù)據(jù)量較大的請(qǐng)求,比如說(shuō)下載一個(gè)較大的文件,Volley可能相比于其他的框架,就有點(diǎn)不足了。
    2021-06-06
  • Kotlin基本數(shù)據(jù)類(lèi)型詳解

    Kotlin基本數(shù)據(jù)類(lèi)型詳解

    大家好,本篇文章主要講的是Kotlin基本數(shù)據(jù)類(lèi)型詳解,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話(huà)記得收藏一下,方便下次瀏覽
    2021-12-12
  • Android Studio三方引用報(bào)錯(cuò)但是項(xiàng)目可以運(yùn)行的解決方案

    Android Studio三方引用報(bào)錯(cuò)但是項(xiàng)目可以運(yùn)行的解決方案

    今天小編就為大家分享一篇關(guān)于A(yíng)ndroid Studio三方引用報(bào)錯(cuò)但是項(xiàng)目可以運(yùn)行的解決方案,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • Android7.0 工具類(lèi):DiffUtil詳解

    Android7.0 工具類(lèi):DiffUtil詳解

    這篇文章主要介紹了Android7.0 工具類(lèi):DiffUtil的相關(guān)資料,并附實(shí)例代碼,和實(shí)現(xiàn)效果圖,需要的朋友可以參考下
    2016-09-09
  • android通用xml解析方法

    android通用xml解析方法

    之前做的網(wǎng)絡(luò)相關(guān)的應(yīng)用,里面涉及到了xml的解析,由于急于完成任務(wù)也沒(méi)有設(shè)計(jì)就直接敲代碼。這幾天給一個(gè)朋友做項(xiàng)目的時(shí)候也涉及到了xml的解析,而且解析的內(nèi)容比較多,我查看了以前的項(xiàng)目中的相關(guān)代碼,頓時(shí)覺(jué)得很多代碼都是可以?xún)?yōu)化的。在此寫(xiě)兩個(gè)通用的xml解析方法,當(dāng)然這里所講的通用只是在一定程度上并且需要遵守一些規(guī)范。
    2013-03-03
  • Android Studio實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能

    Android Studio實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了Android Studio實(shí)現(xiàn)簡(jiǎn)單計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • Android 多種簡(jiǎn)單的彈出框樣式設(shè)置代碼

    Android 多種簡(jiǎn)單的彈出框樣式設(shè)置代碼

    這篇文章主要介紹了Android 多種簡(jiǎn)單的彈出框樣式設(shè)置代碼的相關(guān)資料,這是一個(gè)基于A(yíng)lertDialog和Dialog這兩個(gè)類(lèi)封裝的多種彈出框樣式,其中提供各種簡(jiǎn)單樣式的彈出框使用說(shuō)明。對(duì)android彈出框樣式感興趣的朋友一起看看吧
    2016-11-11
  • android 引導(dǎo)界面的實(shí)現(xiàn)方法

    android 引導(dǎo)界面的實(shí)現(xiàn)方法

    現(xiàn)在越來(lái)越多程序都有引導(dǎo)頁(yè)面了。網(wǎng)上資料不全?,F(xiàn)在自己實(shí)現(xiàn)下。
    2013-06-06

最新評(píng)論

永吉县| 高邑县| 项城市| 虹口区| 甘孜| 正宁县| 大港区| 平乡县| 延长县| 揭东县| 苗栗县| 卢龙县| 道孚县| 临猗县| 四子王旗| 长兴县| 家居| 正定县| 镇远县| 仁寿县| 科技| 兴义市| 福海县| 搜索| 逊克县| 日土县| 双牌县| 井研县| 堆龙德庆县| 虎林市| 永福县| 高州市| 台中市| 巴林左旗| 太保市| 长治市| 潢川县| 常德市| 萍乡市| 乐业县| 商水县|