毕加索不加载一些图像进行回收



我有一个带有毕加索的图像的垂直循环。我需要图像宽度为" match_parent",而高度为" 75DP"。在我的Adaper的方法中,我写了这篇文章:

holder.vImage.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        Picasso.with(context)
            .load(party.getImageRectangleURL())
            .placeholder(context.getResources().getDrawable(R.mipmap.ic_launcher))
            .error(context.getResources().getDrawable(R.mipmap.ic_launcher))
            .resize(holder.vImage.getWidth(), holder.vImage.getHeight())
            .centerCrop()
            .into(holder.vImage);
        }
    });

我现在有问题:

想象我有12个要素。创建活动时,其中10个是可见的,直到用户向下滚动稍微向下滚动时,不可见2个。毕加索仅加载前10张图像,当用户向下滚动后2个项目被占位符代替。但!如果用户在活动加载后立即向下滚动,则将加载最后2张图像。

我在网络中阅读毕加索甚至不会尝试加载图像,如果高度或宽度等于0。也许我有这个问题,因为最后2个元素不可见,所以recyClerview不创建它们。

当滚动后可见元素时,我该怎么做才能强迫毕加索加载文件。(欢迎其他任何想法(

在我的情况下,使用ImageView上的post方法帮助解决了此问题。因此,代码看起来像这样:

holder.vImage.post(() -> {
    Picasso.with(context)
        .load(party.getImageRectangleURL())
        .placeholder(context.getResources().getDrawable(R.mipmap.ic_launcher))
        .error(context.getResources().getDrawable(R.mipmap.ic_launcher))
        .resize(holder.vImage.getWidth(), holder.vImage.getHeight())
        .centerCrop()
        .into(holder.vImage);
});

最新更新