我有一个应用程序从json接收数据(图像),我正在尝试在加载图像时显示Progressbar
,但Progressbar
在图像出现之前消失了,我想在加载图片时显示进度条我正在使用 Glide库。
我可以将进度条始终显示在图像视图后面吗?
我的 adapter.java :
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<Post> posts;
private Context context;
private RecyclerViewClickListener mClickListener;
ProgressBar progressBar;
public MyAdapter(List<Post> posts, Context context, RecyclerViewClickListener clickListener) {
this.posts = posts;
this.context = context;
this.mClickListener = clickListener;
}
public List<Post> getItems(){
return posts;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.picture_item,
parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.bindModel(posts.get(position));
}
@Override
public int getItemCount() { return posts.size(); }
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
Post mPost;
ImageView image;
ViewHolder(View v) {
super(v);
image = (ImageView) itemView.findViewById(R.id.cat_imageView);
progressBar = (ProgressBar) itemView.findViewById(R.id.progress);
progressBar.getIndeterminateDrawable().setColorFilter(Color.WHITE, PorterDuff.Mode.MULTIPLY);
v.setOnClickListener(this);
}
void bindModel(Post post) {
this.mPost = post;
Glide
.with(context)
.load(post.getImgUrl())
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.priority(Priority.HIGH)
.listener(new RequestListener<String, Bitmap>() {
@Override
public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
progressBar.setVisibility(View.GONE);
return false;
}
}).into(image);
}
@Override
public void onClick(View view) {
mClickListener.onClick(view, mPost);
}
}
}
答案 0 :(得分:1)
使用此功能可能会对您有所帮助,
修改强>
使用 Glide v-4.2.0
更新 gradle.build()
compile 'com.github.bumptech.glide:glide:4.2.0'
然后使用以下代码,这对我有用
Glide.with(context)
.load((post.getImgUrl()))
.apply(new RequestOptions()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.priority(Priority.HIGH))
.listener(new RequestListener<Drawable>() {
@Override
public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
progressBar.setVisibility(View.GONE);
return false;
}
@Override
public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource, boolean isFirstResource) {
progressBar.setVisibility(View.GONE);
return false;
}
}).into(image);
见下图
答案 1 :(得分:0)
.listener(new RequestListener<String, Bitmap>() {
@Override
public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
**progressBar.setVisibility(View.GONE);**
return false;
}
@Override
public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
progressBar.setVisibility(View.GONE);
**image.setImageBitmap(resource);**
return false;
}
});
不要使用Glide方法进入()...尝试使用你在onResourceReady()中获得的位图并设置为imageview。它对我有用。