問題描述:使用Glide加載RecyclerView的Item中的圖片,RecyclerView使用了瀑布流展示圖片,但是滾動時圖片會不斷的加載,並且大小位置都會改變,造成顯示錯亂。
解決方法:使用瀑布流,我們可以根據要展示的列數來將屏幕寬度等分,從而獲得Item的寬度。知道了寬度,那么我們就可以使用Glide的override()方法根據圖片的比例自適應地放大或縮小得到合適的高度。這樣顯示時就不會由錯亂的問題了。
步驟1:設置Item的最外層布局的layout_height為wrap_content(當然也可以設置一個固定大小),如果Item里面的圖片也設置高度為wrap_content;
步驟2:先得到屏幕的寬高,然后根據要顯示的列數進行均分。比如我現在想要展示列數為2的瀑布流,我們就可以把屏幕寬度除以2,得到圖片的寬度。
//屏幕的寬度(px值) int screenWidth = getContext().getResources().getDisplayMetrics().widthPixels; //Item的寬度,或圖片的寬度 int width = screenWidth/2;
步驟3:用Glide加載圖片
//這里的SIZE_ORIGINAL為Gilde里自帶的參數,不是我定義的常量 Glide.with(getContext()).load(item.getUrl()).override(width,SIZE_ORIGINAL) .fitCenter().into(imageview);
然后再嘗試一下上下滾動RecyclerView,你會發現之前圖片變形錯位的問題都解決了。