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

一個吸頂Item的簡單實現(xiàn)方法分享

 更新時間:2019年09月07日 14:12:05   作者:susion  
這篇文章主要給大家介紹了一個吸頂Item的簡單實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧


一般的對于上圖樣式的Sticker我們使用CoordinatorLayout & AppBarLayout就可以說實現(xiàn)。

但是對于下面這種呢?

我的實現(xiàn)思路

首先整個頁面的UI結(jié)構(gòu)是通過RecyclerView實現(xiàn)的。

對于上面這個Sticker的實現(xiàn)是在布局的最上方添加了一個和RecyclerView中要吸頂?shù)腎tem一模一樣的布局。然后監(jiān)聽RecyclerView的滾動:

mPostDetailRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
 override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
  if (pageStatus == null || pageStatus.stickerPos == -1) return

  val preHolder = recyclerView.findViewHolderForAdapterPosition(pageStatus!!.stickerPos - 1)
  val targetHolder = recyclerView.findViewHolderForAdapterPosition(pageStatus!!.stickerPos)

  var offset = if (targetHolder != null) { //滾出去了
   -targetHolder.itemView.top
  }else{
   0
  }

  if (preHolder != null) {
   offset = -1 
  }

  if (offset < 0) {
   mPostDetailCommentHeaderSticker.visibility = View.GONE
  } else {
   mPostDetailCommentHeaderSticker.visibility = View.VISIBLE
  }
 }
}

上面pageStatus.stickerPos是Sticker在RecyclerView中的數(shù)據(jù)的位置。上面的邏輯寫的其實比較復(fù)雜,不過確實實現(xiàn)了需求(-_-), 我解釋一下:

即我判斷Sticker是否出現(xiàn)依賴于itemView.top和Sticker的前一個itemview:

  1. 如果當(dāng)前的Sticker的 itemview顯示在RecyclerView中,則根據(jù)它itemView.top來判斷它是否滾動到了頂部
  2. 如果它的前一個itemview已經(jīng)不在RecyclerView中了(被回收了),那說明它肯定滾出去了,這時直接顯示

上面的邏輯很奇怪,不過確實實現(xiàn)了吸頂?shù)男枨蟆?br />

不過在后面的需求迭代中Sticker ItemView的前一個ItemView會不斷變化,于是上面這段代碼就出現(xiàn)了bug。。。。 那怎么解決呢?

更簡單通用的方法

最后靈機一動,對于StickerItemView的顯示我完全可以不依賴于前面這個ItemView:

mPostDetailRv.addOnScrollListener(object : RecyclerView.OnScrollListener() {
 override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
  val currentDataPos = recyclerView.getChildAdapterPosition(recyclerView.getChildAt(0))

  if (pageStatus != null && currentDataPos < pageStatus.stickerPos) {
   mPostDetailCommentHeaderSticker.visibility = View.GONE
  } else {
   mPostDetailCommentHeaderSticker.visibility = View.VISIBLE
  }
 }
})

上面這段代碼很輕松的修復(fù)了bug。并且它的邏輯很簡單,也很通用:

判斷當(dāng)前RecyclerView顯示的第一個條目的位置是否大于StickerItem的位置,如果大于就展示吸頂Sticker

效果:

上面這種實現(xiàn)僅適用UI結(jié)構(gòu)是RecyclerView的情況

PASS : 如果你就是這么做的,請無視我(-_-)

更多小分享 : AdvancedAndroid

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

奈曼旗| 五大连池市| 汉川市| 天津市| 沭阳县| 儋州市| 丰县| 温宿县| 聂拉木县| 客服| 曲沃县| 牙克石市| 汤阴县| 房产| 新巴尔虎右旗| 易门县| 镇江市| 增城市| 多伦县| 武汉市| 漳浦县| 遂溪县| 出国| 玉溪市| 微山县| 伽师县| 永胜县| 平乡县| 青神县| 剑川县| 寿光市| 库尔勒市| 龙里县| 滦南县| 西乌珠穆沁旗| 开封市| 廊坊市| 乐平市| 普定县| 吉木萨尔县| 霍林郭勒市|