我有一个带有毕加索的图像的垂直循环。我需要图像宽度为" 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);
});