tft每日頭條

 > 科技

 > android studio怎麼添加

android studio怎麼添加

科技 更新时间:2025-01-09 05:02:32

要實現類似抖音上下滑動小視頻的絲滑效果,需要有一個預加載的功能。所謂的預加載,

就是需要在顯示當前頁的情況下,提前将當前頁後面的内容加載,以保證用戶滑動到下一個視頻的時候,

可以減少等待時間,在正常網速下,可以做到絲滑浏覽。

在 ViewPager2 第四個版本中加入了一個新功能:setOffscreenPageLimit

android studio怎麼添加(Android技術分享ViewPager2離屏加載)1

setOffscreenPageLimit(int limit)

參數:limit 有多少頁面将在任一側保持在屏幕外。有效值為 >= 1 和 默認值 -1

說明:設置應保留在當前可見頁面任一側的頁面數。超出此限制的頁面将在需要時從适配器重新創建。設置的值必須大于0或者默認值-1。當前頁面的前後(limit數)頁面會被添加到視圖層次結構中,即使它是不可見的,超出limit數将會從視圖删除,但會像 RecyclerView一樣被回收。

通過方法說明可以知道,這個特性簡直就是做這種功能的神器呀,但能否實現預期效果。

我們簡單寫一個 Demo 測試一下,在滑動時候,View 的生命周期,這樣我們就可以在合适的回調方法裡創建。銷毀播放器,暫停/播放視頻。

使用:

dependencies { implementation("androidx.viewpager2:viewpager2:1.0.0") }

Adapter

inner class VPAdapter() : RecyclerView.Adapter<VPAdapter.BaseViewHolder?>() { override fun onCreateViewHolder( parent: ViewGroup, viewType: Int): BaseViewHolder { val itemView: View = LayoutInflater.from(parent.context).inflate(R.layout.vp_item_layout, parent, false) return BaseViewHolder(itemView) } override fun onBindViewHolder( holder: BaseViewHolder, position: Int) { } override fun getItemCount(): Int { return dataArray.size } override fun onViewDetachedFromWindow(holder: BaseViewHolder) { super.onViewDetachedFromWindow(holder) Log.d("ViewPager2","View 離屏 第${holder.adapterPosition 1}頁") } override fun onViewAttachedToWindow(holder: BaseViewHolder) { super.onViewAttachedToWindow(holder) Log.d("ViewPager2","View 加入屏幕 第${holder.adapterPosition 1}頁") } inner class BaseViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { var root: RelativeLayout? var image :TextView? init { root = itemView.findViewById(R.id.root) image = itemView.findViewById(R.id.iv_test) } } }

準備10條數據,設置offscreenPageLimit為1,則在屏幕上的頁數一直都是3頁。預期是第一頁的時候,會創建第二頁。滑動到第二頁的時候,創建第三頁。滑動到第三頁的時候,創建第四頁,并且第一頁走 onViewDetachedFromWindow,從視圖删除。接下來我們滑動,看下日志。

進入頁面 ViewPager2: View 加入屏幕 第1頁 ViewPager2: View 加入屏幕 第2頁 滑動到第二頁 ViewPager2: View 加入屏幕 第3頁 滑動到第三頁 ViewPager2: View 加入屏幕 第4頁 ViewPager2: View 離屏 第1頁 滑動到第四頁 ViewPager2: View 加入屏幕 第5頁 ViewPager2: View 離屏 第2頁 返回第三頁 ViewPager2: View 加入屏幕 第2頁 ViewPager2: View 離屏 第5頁

可見,日志輸入完全符合我們的預期,除了第一頁後,視圖中永遠都會有三頁在上面。

我們隻需要在對應的回調中創建播放器,暫停播放,銷毀播放器即可。如下

在View加入窗口的回調中,創建播放器,開始播放随後暫停⏸️ override fun onViewAttachedToWindow(holder: BaseViewHolder) { super.onViewAttachedToWindow(holder) Log.d("ViewPager2","View 加入屏幕 第${holder.adapterPosition 1}頁") val player =createArLivePlayer() dataArray[holder.adapterPosition].player=player player.startPlay("url") player.pause() }

在View離開窗口的回調中,銷毀播放器 override fun onViewDetachedFromWindow(holder: BaseViewHolder) { super.onViewDetachedFromWindow(holder) Log.d("ViewPager2","View 離屏 第${holder.adapterPosition 1}頁") dataArray[holder.adapterPosition].player.release() }

創建播放器就暫停,這樣播放器就可以緩沖下一頁的視頻數據,那我們需要再找個地方将當前正在顯示的頁面的播放器開始播放。

隻需注冊 ViewPager2的翻頁監聽,播放當前頁的播放器,暫停其他頁面的播放即可。

binding.vp.registerOnPageChangeCallback(object :ViewPager2.OnPageChangeCallback(){ override fun onPageSelected(position: Int) { super.onPageSelected(position) dataArray.forEachIndexed { index, videoData -> if (index==position){ dataArray[index].player?.resumePlay() Log.d("ViewPager2","當前${index}播放") } }else{ dataArray[index].player?.pause() Log.d("ViewPager2","當前${index}暫停") } } } } })

運行,發現效果非常的絲滑,如圖所示。所以說 ViewPager2非常适合做類似場景的需求~

android studio怎麼添加(Android技術分享ViewPager2離屏加載)2

android studio怎麼添加(Android技術分享ViewPager2離屏加載)3

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved