RecyclerView瀑布流,專案解決item跳動,留白,閃爍
最近公司,開發仿快手的短視訊音樂APP,其中首頁自然需要用到瀑布流,下面說下自己碰到的坑:
瀑布流,首先,肯定圖片要設定不同的高度,佈局中圖片自然是用wrap_content,下面說坑:
item到處跳動,甚至左右兩列切換,解決辦法:
manager.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_NONE);
這個自不用說,網上一搜一大把。但是即使這樣,當你載入多頁後,在網上滑到第一頁,會出現空白,或者圖片交錯,這時候,你網上一搜,很多人說:
xRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override這樣一來,好像首頁不留白, 但是,但是我相信很多人下拉載入更多的過程中肯定會發現圖片會閃爍,然後往回滑動的時候出現部分圖片跳來跳去,網上搜的這個方法太不靠譜,我折騰了很久,網上有作者貼出原始碼:http://www.jianshu.com/p/81e088000ba6public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); manager.invalidateSpanAssignments(); } });
notifyItemInserted(載入更多開始position);
而不是notifyDataSetChange();只要這樣去載入更多,理論上圖片閃爍,和留白問題都解決了。我的圖片載入是Glide。如果有問題可一起討論。
另外仿快手瀑布流,瀑布流左右不留間距,只有中間留間距的辦法,一開始困擾了我好久,如果不是瀑布流,自然可以對每個item判斷是左邊還是右邊,然後分別設定LayoutParams,但是在瀑布流中怎麼知道對應的item是左邊還是右邊呢?關鍵就是怎麼知道對應的item是左邊還是右邊。我說一下我實現的思路,首先肯定需要獲取每個item的高度,新建一個hashMap,用於記錄item是左邊還是右邊,增加兩個屬性,左、右累加高度,通過邏輯去判斷每個item的高度是加在做高度上,還是右高度上,判斷左>右,自然這個item應該在右邊,否則左邊,並且通過前面的hashMap儲存好,下次只要判斷對應positon是否存在,然後拿出來即可!噼裡啪啦說了這麼多,肯定很枯燥,我大概貼一下我的程式碼吧,當然有些寫的不是很好的地方,多多批評!
我發現天貓的瀑布流也有左右跳轉的問題,但我確實在之前版本中把這個解決了。
//計算高度 if (!imageHeightMap.containsKey(position)) { paramsHeight = (int) ((rankingData.getLength() / (float) rankingData.getWidth()) * width); imageHeightMap.put(position, paramsHeight); } else { paramsHeight = imageHeightMap.get(position); } //判斷是左邊還是右邊 if (!isLeftMap.containsKey(position)) { if (leftHeight < rightHeight) { isLeft = true; } else if (leftHeight == rightHeight) { isLeft = !isLeft; } else { isLeft = false; } //高度累加 if (isLeft) { leftHeight = leftHeight + paramsHeight + bottomHeight; } else { rightHeight = rightHeight + paramsHeight + bottomHeight; } isLeftMap.put(position, isLeft); } else { isLeft = isLeftMap.get(position); } //重新設定寬高 ViewGroup.LayoutParams layoutParams = viewHolder.ivItemBackground.getLayoutParams(); layoutParams.height = paramsHeight; viewHolder.ivItemBackground.setLayoutParams(layoutParams); //整個item設定高度和左右邊距 if (isLeft) { StaggeredGridLayoutManager.LayoutParams layoutLeftParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams(); layoutLeftParams.leftMargin = DisplayUtil.dip2px(mContext, 0); layoutLeftParams.rightMargin = DisplayUtil.dip2px(mContext, (float) 1); viewHolder.itemView.setLayoutParams(layoutLeftParams); } else { StaggeredGridLayoutManager.LayoutParams layoutRightParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams(); layoutRightParams.leftMargin = DisplayUtil.dip2px(mContext, (float) 1); layoutRightParams.rightMargin = DisplayUtil.dip2px(mContext, 0); viewHolder.itemView.setLayoutParams(layoutRightParams); }
相關推薦
RecyclerView瀑布流,專案解決item跳動,留白,閃爍
最近公司,開發仿快手的短視訊音樂APP,其中首頁自然需要用到瀑布流,下面說下自己碰到的坑:瀑布流,首先,肯定圖片要設定不同的高度,佈局中圖片自然是用wrap_content,下面說坑:item到處跳動,甚至左右兩列切換,解決辦法:manager.setGapStrategy(
RecyclerView和StaggeredGridLayoutManager實現瀑布流向下滑動item跳動、留白的問題
由於專案需要最近第一次採用RecyclerView和StaggeredGridLayoutManager實現了瀑布流,原本以為官方的東西不會有什麼問題,但是好事多磨,實現了以後上拉載入更多,都沒有問題,但是下拉回顯上面的item的時候出現跳動,回到最頂部的時候還會有留白。針
Android 解決RecyclerView瀑布流效果結合Glide使用時圖片變形的問題
變形 into 想要 pla enter glide加載圖片 pan etc clas 問題描述:使用Glide加載RecyclerView的Item中的圖片,RecyclerView使用了瀑布流展示圖片,但是滾動時圖片會不斷的加載,並且大小位置都會改變,造成顯示錯亂。
Android RecyclerView瀑布流中Item寬度異常的問題(原始碼分析)
問題描述 通過RecyclerView配合StaggeredGridLayoutManager可以很方便的實現瀑布流效果,一般情況下會把作為Item的子View寬度設定為MATCH_PARENT,那麼子View將根據列數(假定是垂直排列)平均分配Recycle
RecyclerView瀑布流一邊空太多,一邊擠滿了
最近專案開發的時候發現用RecyclerView寫的瀑布流,不是按照正常的計算高度排列的,兩列瀑布,一列空了很多,另外一列擠滿了,找了好久都沒找到原因,知道是高度計算問題,可不知道是哪裡的原因。後來發現全部用ImageLoader載入的網路圖片就沒這個問題,而
採用maven的聚合,專案拆分、整合boot cloud時,錯誤的整合思路,如何解決
idea下,如何進行springboot的maven聚合依賴。 首先,把我的專案結構圖大致說明一下: 專案檔案結構大致圖: 對應的pom資訊如下,從父級逐級顯示,以下只是備註自己的關鍵程式碼 jt-parent <modules> <modul
RecyclerView 瀑布流使用總結
目錄 遇到的問題 解決辦法 遇到的問題 item亂跳,頂部留白,滑動卡頓 item設定間距 解決辦法 問題1 關鍵在於知道圖片的原始寬高,然後根據圖片的原始寬高比動態的設定item的高度。 圖片的原始寬高可以由後臺返回,也可以
RecyclerView瀑布流設定左、右、上、下的距離一樣
RecyclerVeiw本身自帶有距離設定的類,如下:只需要我們繼承一下即可 public class SpaceBaseItemDecoration extends RecyclerView.ItemDecoration { private int spac
recyclerview 的複用或者是item裡的圖片問題,還是圖片隨著數量不斷變大,以及裡button複用
不管是recyclerview和listview、girdview,都不知道用了多少次了,用著用著還是會出現問題,這裡只是記錄一下,加深印象,寫的有些粗糙,勿怪!出現複用的問題,listview和gridview需要自己定義viewholder,而recyclerview裡面已經定義viewho
Android RecyclerView瀑布流佈局新增Footer實現上拉載入
這篇文章應該是晚到了好幾個月,之前想寫,但是中途遇到了一些棘手的問題,無奈沒有去寫。寫這篇文章的最初來源是一個朋友問我在Android中如何實現瀑布流佈局?,當時我的回答是使用RecyclerView,後來他又問我那怎麼實現上拉載入並新增Footer呢?我想都沒
Recyclerview瀑布流效果
新增依賴,如上文 public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.MyHolder> { private Context context; privat
Android RecyclerView瀑布流展示(OkHttp協議)
一言不合就上圖 OkHttp和recyclerView都是第三方提供的,so先注入依賴 //okhttp3網路請求協議 compile 'com.squareup.okhttp3:okhttp:3.9.0' //recyclerview控制元
Vue專案解決element元件環形進度條,超過100%時,不渲染問題。
問題描述:使用element元件的環形進度條時,給出的屬性只有一個引數, 要求只能填寫1-100的數,當我們的數值超過100時,想要把環形渲染滿,但問題出來了,700以上的數值時,圖層就不渲染了,如下圖所示:  
RecyclerView瀑布流載入圖片實現
先寫好RecyclerView的介面卡. public class MyRecyclerAdapter extends RecyclerView.Adapter<MyRecyclerAdapter.MyViewHolder> { priv
MVP模式 + RecyclerView瀑布流 + 上拉載入、下拉重新整理
首先匯入一些用到的依賴:(不要忘記新增網路許可權) // 包括OKhttp網路請求、springview重新整理載入、butterknife相當於findviewbyid、glide載入圖片 // recyclerview-flexibledivider分割線 com
如何給recyclerView瀑布流設定均等間距
recyclerVIew 預設是不帶間距的,但是我們可以通過SpacesItemDecoration方法給其設定間距,但是這樣問題來了這樣設定的間距如果有兩列的話 中間的間距是你設定的間距的2倍,至於為什麼會這樣,是SpacesItemDecoration方法中設定間距的方式是給itemview的四周加上
Recyclerview 瀑布流效果
1.Activity public class SecondActivity extends Activity { private RecyclerView recyclerView; private ArrayList<String> list
Android Studio [RecyclerView/瀑布流顯示]
interface pos scaletype super oid appcompat adapt 分享 near PuRecyclerViewActivity.java package com.xdw.a122.recyclerview; import and
使用maven構建專案,專案上有紅叉提示錯誤,但是錯誤找不到
專案上有紅叉提示錯誤,但是整個專案沒有任何檔案有錯,這是怎麼回事啊錯誤現象如圖 -----------------------------------------------------------------------------------------------
公共鑰匙盒 程式碼複雜,但是容易理解。先留著,以後再優化
#include <iostream> #include<stdio.h> #include<queue> #include<string.h> #include<stdlib.h> #include