【发布时间】:2020-10-18 18:52:45
【问题描述】:
在 MainActivity 中,我根据 imageview 大小使用 glide 将一些图像加载到 recyclerview 中。
见:
@Override
public void onBindViewHolder(PreviewAdapter.MyViewHolder holder, int position) {
Glide.with(context).load(previewArrayList.get(position).getUrl()).diskCacheStrategy(DiskCacheStrategy.AUTOMATIC).into(holder.postImage);
}
XML:
<ImageView
android:id="@+id/post_image"
android:layout_width="match_parent"
android:layout_marginTop="4dp"
android:layout_height="250dp"
android:layout_below="@+id/post_name"
android:scaleType="centerCrop" />
如你所见,我也使用 Glide 缓存 DiskCacheStrategy.AUTOMATIC 以便下次没有 Internet Glide 时可以显示图像。现在你可以在https://medium.com/@multidots/glide-vs-picasso-930eed42b81d这个帖子中看到“Glide resizes the image as per the dimension of the ImageView.”
现在,我想要在 SpalshActivity 中的最终大小,Glide 将存储在缓存中。因此,当 SpalshActivity 之后,当用户第一次打开 MainActivity 没有 Internet Conncetion 时,它应该加载图像。
那怎么可能呢?
在 SpalshActivity 中,我已经在缓存图像,但它又是第一次在 MainActivity 中下载/调整大小。
SpalshActivity:
private void preloadImage(String url) {
try {
//File file = Glide.with(this).asFile().load(url).submit().get();
//String path = file.getPath();
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
if (isPostDataLoaded) {
postImagesLoaded++;
if (postImagesLoaded == postImagesCount) {
binding.progressBar.setVisibility(View.GONE);
AlertDialogManager.showAlertDialogMessage(SplashActivity.this, "Error", "Something went wrong, Please try again later", false, "Exit", null, SplashActivity.this, IS_TABLET);
}
} else {
previewImagesLoaded++;
if (previewImagesLoaded == previewImagesCount) {
binding.progressBar.setVisibility(View.GONE);
AlertDialogManager.showAlertDialogMessage(SplashActivity.this, "Error", "Something went wrong, Please try again later", false, "Exit", null, SplashActivity.this, IS_TABLET);
}
}
return true;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
if (isPostDataLoaded) {
postImagesLoaded++;
if (postImagesLoaded == postImagesCount) {
PostSingleton.getInstance().setPostMap(postMap);
startFreshActivity(PreviewActivity.class);
}
} else {
previewImagesLoaded++;
if (previewImagesLoaded == previewImagesCount) {
PreviewSingleton.getInstance().setPreviewList(previewList);
getPostImageCount();
postPreloadAllImages();
}
}
return true;
}
}).preload();
} catch (Exception e) {
e.printStackTrace();
}
}
【问题讨论】:
标签: java android android-glide