獲取recycleView瀑布流模式下第一個完全顯示出來的View,解決獲取不准問題,坑點
recycleView線性佈局或其他佈局可以直接用google提供的方法獲取,瀑布流就比較坑了,使用google提供的佈局獲取不準
當時做這個主要用於瀑布流recycleView的視訊自動播放,視訊播放採用google的EXOPlayer
解決辦法:
/**
* 獲取瀑布流的第一個完全顯示的View
* @param recyclerView
* @return
*/
private View getItemView(RecyclerView recyclerView){
try {
//計算瀑布流的第一個完全顯示的item,踩坑
int[] firstVisibleItems = null;
firstVisibleItems= ((StaggeredGridLayoutManager)recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPositions(firstVisibleItems);
Log.d(LogUtil.BABY_SHOW,"firstVisibleItems="+firstVisibleItems[0]+","+firstVisibleItems[1]+"");
int [] firstCompleteItems=null;
firstCompleteItems=((StaggeredGridLayoutManager)recyclerView.getLayoutManager()).findFirstVisibleItemPositions(firstCompleteItems);
Log.d(LogUtil.BABY_SHOW,"f="+firstCompleteItems[0]+","+firstCompleteItems[1]+"");
int item;
//以下排序是為了防止recycleView有head,造成無法區分那個時完全顯示的第一個View問題,坑坑坑,對於瀑布流,Google未提供直接呼叫的方法,需要自己計算
//排序
if (firstCompleteItems[0]>firstCompleteItems[1]){
int i=firstCompleteItems[0];
firstCompleteItems[0]=firstCompleteItems[1];
firstCompleteItems[1]=i;
}
//排序
if (firstVisibleItems[0]>firstVisibleItems[1]){
int i=firstVisibleItems[0];
firstVisibleItems[0]=firstVisibleItems[1];
firstVisibleItems[1]=i;
}
if(firstVisibleItems[0]>0){
item=firstVisibleItems[0]-firstCompleteItems[0];
}else if(firstVisibleItems[1]>0){
item=firstVisibleItems[1]-firstCompleteItems[1];
}else if(firstVisibleItems[0]==0 && firstVisibleItems[1]==0 && firstCompleteItems[0]==0 && firstCompleteItems[1]==0){
item=1;
}else{
return null;
}
LogUtil.d(LogUtil.BABY_SHOW,"第一個完全顯示的item="+item);
View v= recyclerView.getChildAt(item);
return v;
}catch (Exception e){
e.printStackTrace();
return null;
}
}
相關文章
- 獲取上個月的問題
- pipeline 顯示獲取git分支Git
- 獲取view所在的ViewControllerViewController
- Swift view 中 獲取ViewControllerSwiftViewController
- C#、IIS獲取時間帶星期問題解決C#
- SpringMVC的資料獲取問題SpringMVC
- 解決PHP Post獲取不到非表單資料的問題PHP
- Golang 獲取 goroutine id 完全指南Golang
- created mounted 動態獲取資料渲染後,獲取DOM問題
- 解決HIbernate分頁問題獲取表總行數的小Bug
- 獲取Wireshark資料流
- win10正在獲取ip地址連線不上怎麼辦_win10一直顯示正在獲取網路地址的解決方法Win10
- victoriaMetrics無法獲取抓取target的問題
- MDM獲取UDID的幾個技術點
- WebApi和Mvc的Session一直獲取不到問題WebAPIMVCSession
- poi讀取表格資料和表格顯示不一致問題解決
- PHP獲取網站標題和圖示PHP網站
- js劃詞翻譯、螢幕取詞,取詞位置獲取(真正解決定位問題)JS
- Node.js 解決Gzip下獲取真實的下載進度問題Node.js
- 記錄一次STM32F031 ADC取樣不准問題
- 如何在 Janus 中獲取 WebRTC 的流Web
- springcloud fegin獲取request header解決方案SpringGCCloudHeader
- JavaScript文字框獲取焦點彈出tipsJavaScript
- 獲取上個月
- php一句話獲取獲取檔案目錄的方法PHP
- jquery獲取元素節點jQuery
- 微軟商店無法獲取怎麼辦_win10應用商店點獲取沒反應的解決方法微軟Win10
- Laravel 5 路由獲取 與 view 多次傳參Laravel路由View
- IQKeyboardManager 獲取完成按鈕的解決辦法
- laravel symfony request獲取真實ip的坑Laravel
- js 獲取 table 中的每一個tdJS
- React獲取資料,假如為陣列,使用map出現的問題React陣列
- odoo wizard介面顯示帶核取方塊列表及勾選資料獲取Odoo
- java編譯和獲取resource目錄的問題Java編譯
- Java如何解決同時出庫入庫訂單號自動獲取問題Java
- Linux c程式中獲取shell指令碼輸出(如獲取system命令輸出)LinuxC程式指令碼
- tp6 路由匹配引數獲取問題路由
- qt 打包釋出 獲取dllQT
- kettle‘獲取檔名’輸出