Gridens - информационные технологии

индикатор прогресса исчезает до появления изображения

У меня есть приложение, которое получает данные (изображения) из 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);
        }
    }
}

Ответы:


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

см. изображение ниже

введите здесь описание изображения

14.10.2017
  • спасибо за ваш ответ, но я не могу найти public boolean onLoadFailed ..., я могу использовать только onException и onResourceReady 14.10.2017
  • Да, извините за это, я думаю, вы используете Glide 3.3.0 14.10.2017
  • Могу ли я сделать индикатор выполнения всегда видимым за изображением? 14.10.2017
  • я получаю эту ошибку: listener (com.bumptech.glide.request.RequestListener<? super java.lang.String,android.graphics.Bitmap>) in BitmapRequestBuilder cannot be applied to (anonymous com.bumptech.glide.request.RequestListener<java.lang.String,com.bumptech.glide.load.resource.drawable.GlideDrawable>) 14.10.2017
  • Позвольте мне проверить, я внедряю Glide на свою сторону, на самом деле я работал со старой версией. Пожалуйста, дайте мне немного времени, я пытаюсь решить вашу проблему. 14.10.2017
  • Можете ли вы сказать мне, какую версию скольжения вы используете? 14.10.2017
  • @safae смотрите отредактированный ответ. Работаю отлично на моей стороне и прошу прощения за опоздание, на самом деле моя система слишком медленная :( 15.10.2017
  • Большое спасибо, на самом деле я использую glide v3.8.0, но я постараюсь обновить его. 15.10.2017

  • 2
    .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 into()... попробуйте использовать растровое изображение, которое вы получаете в onResourceReady() и устанавливаете в виде изображения. Это сработало для меня.

    14.10.2017
    Новые материалы

    Журналы Py № 2: Если, Элиф, Иначе?
    У меня такое чувство, будто я давно ничего не писал, хотя прошло два дня с тех пор, как я опубликовал свою первую историю. В любом случае, сегодня произошло много всего, так что приступим...

    Работа в Реакции
    Я изучаю React в Bloc прямо сейчас. До сих пор я изо всех сил пытался понять темы. Тем не менее, я только что закончил проблему, над которой некоторое время размышлял, и хочу записать свой..

    Нужен ли банкам искусственный интеллект, чтобы кардинально изменить свою работу?
    Почему необходимо использовать искусственный интеллект в банковской сфере? Существенное использование многочисленных инноваций ИИ, таких как машинное обучение , глубокое обучение и..

    Какую последнюю статью вы считаете стоящей поделиться?
    Я люблю читать качественные статьи. Не стесняйтесь делиться своей работой.

    Преобразование CoreML, позволяющее использовать Fast-Neural-Style-Transfer на iOS и MacOS.
    Как использовать Fast-Neural-Style-Transfer на iOS Преобразованная модель: GitHub — john-rocky/CoreML-Models: Преобразованный зоопарк моделей CoreML...

    ИИ в правоохранительных органах: мощный инструмент с двойной природой
    Искусственный интеллект (ИИ) революционизирует правоохранительную деятельность, предлагая инновационные тактики расследования, повышая достоверность доказательств и оптимизируя процессы. Тем..

    Autoencoder Average Distance  — классический способ, используемый внутри Microsoft для выявления сходства…
    Среднее расстояние автоэнкодера (AAD) использует более простой подход для определения расстояния между двумя наборами данных. Нейронный автоэнкодер может преобразовать любой элемент данных в..