Recyclerview+glide的问题

来源:互联网 发布:中铁秦皇半岛 知乎 编辑:程序博客网 时间:2024/06/05 22:08

首先:现象:recyclerview+glide+瀑布流
问题: 快速滑动出现,item错乱,图片闪烁,

查了各种资料,找了各中原因,太难找了,关键问题就是,你从服务器获取图片的时候,当前的viewholder,不知道,你图片有多大,造成,复用的时候,错乱,

  1. 解决方案: 给你的item布局中固定宽高,让你的布局
        <ImageView            android:id="@+id/item_beagirs_ig"            android:layout_width="48dp"            android:layout_height="100dp"            android:adjustViewBounds="true"            android:background="#ff3c3c3c"            android:scaleType="centerCrop" />

当然如果这样的话,你用瀑布流就没什么意义了,也展现不出来,真正的效果,要想展现瀑布流效果,首先获取图片的比例,其次,再根据比例,设置宽高,这样我试过了,就显示不出来图片了,也不知道是不是我的方法不对,于是我采用了简单的方式,如下,其中imagHeightMap是一个hashMap类型的集合,记录每次的宽高,用于下次,复用时候的直接提取,

             if (!imageHeightMap.containsKey(postion)) {                    View view = holder.getView(R.id.item_beagirs_ig);                    ViewGroup.LayoutParams params = view.getLayoutParams();                    //设置图片的相对于屏幕的宽高比                    params.width = (int) (TDevice.getScreenWidth() / 2);                    params.height = (int) (TDevice.getScreenHeight() / 2 + Math.random() * 100);                    view.setLayoutParams(params);                    imageHeightMap.put(postion, params.height);                } else {                    Integer integer = imageHeightMap.get(postion);                    View view = holder.getView(R.id.item_beagirs_ig);                    ViewGroup.LayoutParams params = view.getLayoutParams();                    params.width = (int) (TDevice.getScreenWidth() / 2);                    params.height = integer;                    view.setLayoutParams(params);                }

这样错乱问题,基本解决,要是你再写上glide的占位图,估计更不会乱了,方正我是写了,很规整,除此之外,如果你的瀑布流,要是最顶端会留空白的话,你就用对使用如下,

     @Override            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {                ((StaggeredGridLayoutManager) layoutManager).invalidateSpanAssignments();//让头部重新布局,刷新                super.onScrollStateChanged(recyclerView, newState);            }

哈哈,就这样就解决了,大毛:走了,别啊,还有闪烁问题没解决呢,闪烁,还有什么闪烁问题,开个玩笑,

  1. 闪烁问题的解决:
    每次向上滑动,当加载图片的时候,总是,闪烁一下,很明显,你刷新的太多了,当你下拉加载更多的时候,得到数据,不要用 adapter.notifyDataSetChanged();而是用notifyItemChanged(mdatas.size());//里面的数根据你的,去设置。
    到此就基本解决,问题所在。
1 0