进度条在图像出现之前消失

时间:2017-10-14 18:13:52

标签: java android progress-bar android-glide

我有一个应用程序从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);
        }
    }
}

2 个答案:

答案 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);

见下图

enter image description here

答案 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。它对我有用。