RecyclearView + Glide + Scroll: загрузка изображений занимает слишком много времени или не загружается
Я использую Glide Image Loader. загрузка изображения с сервера занимает слишком много времени (более 200 секунд), а в некоторых случаях не загружается. Все изображения хранятся на облачном сервере.
Когда я прокручиваю вверх, изображение отображается как в первый раз, и для его отображения требуется немного времени, кэширование изображений также не работает должным образом. В приложениях, таких как Amazon, одноразово загруженное изображение Facebook не исчезает. Я хочу такую же технику в моем приложении.
Я использую Staggered Gridview, используя DynamicheightImageview, для этого я вызываю AsyncTask на onBindViewHolder
new GetImageTask(singleArtDataitem, vh.imageView, position).execute(singleArtDataitem);
AsyncTask
private class GetImageTask extends AsyncTask<SingleArtData, Void, Float> {
private SingleArtData item;
private final DynamicHeightImageView imageView;
int position;
public GetImageTask(SingleArtData item, DynamicHeightImageView holder, int position) {
this.imageView = holder;
this.position = position;
}
@Override
protected Float doInBackground(SingleArtData... params) {
item = params[0];
try {
if (GlobalMethods.isNotEmpty(item.getImageName())) {
item.setImagefullurl(baseuri + item.getImageName());
URL neturl = new URL(item.getImagefullurl());
final Bitmap image = BitmapFactory.decodeStream(neturl.openConnection().getInputStream());
int width = image.getWidth();
int height = image.getHeight();
item.setImage_width(width);
item.setImage_height(height);
float ratio = (float) height / (float) width;
item.setImage_ratio(ratio);
} else {
item.setImagefullurl(null);
}
} catch (Exception e) {
item.setImagefullurl(null);
e.printStackTrace();
}
return item.getImage_ratio();
}
@Override
protected void onPostExecute(Float result) {
RelativeLayout.LayoutParams rlp = (RelativeLayout.LayoutParams) imageView.getLayoutParams();
rlp.height = (int) (rlp.width * result);
imageView.setLayoutParams(rlp);
imageView.setHeightRatio(result);
if (GlobalMethods.isNotEmpty(item.getImagefullurl())) {
// Picasso.with(mContext)
// .load(baseuri + item.getImageName()).placeholder(PlaceHolderDrawableHelper.getBackgroundDrawable(position))
// .error(R.drawable.ic_med)
// .into(imageView);
Glide.with(MyApplication.getInstance())
.load(item.getImagefullurl()).placeholder(PlaceHolderDrawableHelper.getBackgroundDrawable(position))
.error(R.drawable.loadicon)
.placeholder(PlaceHolderDrawableHelper.getBackgroundDrawable(position))
.diskCacheStrategy(DiskCacheStrategy.ALL)
.skipMemoryCache(false)
.into(imageView);
}
}
}
Заранее спасибо.