獲取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;
}
}
相關文章
- 解決多個路由繫結同一個元件 獲取引數只獲取一次的方法路由元件
- iOS10 IDFA 獲取不到問題解決iOS
- pipeline 顯示獲取git分支Git
- Android獲取view高度AndroidView
- 通過nginx中轉獲取不到IP的問題解決Nginx
- C#、IIS獲取時間帶星期問題解決C#
- viewpager獲取當前view報空指標的解決方法Viewpager指標
- javascript如何獲取顯示器的解析度JavaScript
- iOS獲取當前顯示的UIViewControlleriOSUIViewController
- 獲取view所在的ViewControllerViewController
- 解決PHP Post獲取不到非表單資料的問題PHP
- Golang 獲取 goroutine id 完全指南Golang
- 獲取Wireshark資料流
- javascript如何獲取哪個元素獲得焦點JavaScript
- created mounted 動態獲取資料渲染後,獲取DOM問題
- 獲取當前螢幕顯示的viewcontrollerViewController
- 如何獲取當前顯示其的解析度
- 請問:把 Service 給 View,讓 View 自己獲取 Model 是否合理?View
- 關於filter獲取session的問題!!!FilterSession
- SpringMVC的資料獲取問題SpringMVC
- 獲取oracle資料庫連線出現的問題Oracle資料庫
- win10正在獲取ip地址連線不上怎麼辦_win10一直顯示正在獲取網路地址的解決方法Win10
- Swift view 中 獲取ViewControllerSwiftViewController
- JavaScript獲取上一個元素JavaScript
- jQuery獲取上一個元素jQuery
- 解決HIbernate分頁問題獲取表總行數的小Bug
- 解決Android通過BitmapFactory獲取圖片寬高度相反的問題Android
- PHP獲取網站標題和圖示PHP網站
- 關於海量資料的獲取問題
- 解決在IE中獲取資料的快取問題,執行環境為node.js快取Node.js
- iOS獲取檔案大小遇到的坑iOS
- poi讀取表格資料和表格顯示不一致問題解決
- WebApi和Mvc的Session一直獲取不到問題WebAPIMVCSession
- 如何不顯示地圖就獲取位置資料?地圖
- HttpClient 獲取 Cookie 的一次踩坑實錄HTTPclientCookie
- 如何在 Janus 中獲取 WebRTC 的流Web
- js劃詞翻譯、螢幕取詞,取詞位置獲取(真正解決定位問題)JS
- 解決java獲取系統時間差8個小時 專題Java