Recyclerview+glide的问题

首先:现象: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());//里面的数根据你的,去设置。
    到此就基本解决,问题所在。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值