【问题标题】:Glide sometimes show half imageGlide 有时会显示一半图像
【发布时间】:2019-03-24 23:49:48
【问题描述】:

我在我的应用中使用 glide 来显示图像。图像来自 amazon s3 并在图像视图中加载。但有时滑行只是加载图像的一部分。我正在使用它的缓存策略。当我将缓存设置为 false 时,每次都会加载图像。这将花费大量数据给用户。所以我认为那不是一个好的选择。下面是我的代码和问题图片。

滑行代码:

Glide.with(context).load(posts.get(position).getFile()).placeholder(R.drawable.qurbani_background_6).error(R.drawable.error_image)
                    .fitCenter().listener(new RequestListener<File, GlideDrawable>() {
                @Override
                public boolean onException(Exception e, File model, Target<GlideDrawable> target, boolean isFirstResource) {
                    holder.progressBar.setVisibility(View.GONE);
                    //Toast.makeText(context , e.toString() , Toast.LENGTH_LONG).show();
                    //HomeActivity h = new HomeActivity();
                    //h.galleryTask();
                    return false;
                }

                @Override
                public boolean onResourceReady(GlideDrawable resource, File model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                    holder.progressBar.setVisibility(View.GONE);
                    return false;
                }
            }).into(holder.postImage);

和amazon s3下载监听代码:

public void transferObserverListener(final TransferObserver transferObserver)
    {
        transferObserver.setTransferListener(new TransferListener(){

            @Override
            public void onStateChanged(int id, TransferState state)
            {
                Log.e("statechange", state+"");
                if(state.toString() == "COMPLETED")
                {
                    adapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onProgressChanged(int id, long bytesCurrent, long bytesTotal)
            {
                int percentage = 0;
                if(bytesTotal != 0)
                {
                    percentage = (int) (bytesCurrent / bytesTotal * 100);
                }
                Log.e("percentage",percentage +"");
            }

            @Override
            public void onError(int id, Exception ex)
            {
                p.dismiss();
                Log.e("error",ex.toString());
            }

        });
    }

我正在使用回收站视图。图片应该以全视图加载。请告诉我我做错了什么。

【问题讨论】:

标签: android image android-glide


【解决方案1】:

我用com.github.bumptech.glide:glide:4.3.1

try {
                        RequestOptions requestOption =
                                new RequestOptions().placeholder(R.drawable.box).
                                        error(R.drawable.box)
                                        .diskCacheStrategy(DiskCacheStrategy.ALL);


                            Glide.with(context).load(assetComponentModel.getUrl())
                                    .apply(requestOption)
                                    .transition(DrawableTransitionOptions.withCrossFade())
                                    .into(new SimpleTarget<Drawable>() {
                                        @Override
                                        public void onResourceReady(Drawable resource, Transition<? super Drawable> transition) {
                                            mHolder.assets_image.setImageDrawable(resource);
                                        }

                                        @Override
                                        public void onLoadCleared(@Nullable Drawable placeholder) {
                                            mHolder.assets_image.setImageDrawable(placeholder);
                                        }

                                        @Override
                                        public void onLoadFailed(@Nullable Drawable errorDrawable) {
                                            mHolder.assets_image.setImageDrawable(errorDrawable);
                                        }

                                        @Override
                                        public void onLoadStarted(@Nullable Drawable placeholder) {
                                            mHolder.assets_image.setImageDrawable(placeholder);
                                        }
                                    });
                        } 

                    } catch (Exception e) {
                        e.printStackTrace();
                    }

并使用rclOfferListView.setItemViewCacheSize(list.size());

在你的片段中使用了销毁代码

 @Override
public void onDestroy() {
    try {
        if (rclOfferListView != null)
            rclOfferListView.getRecycledViewPool().clear();
    } catch (Exception e) {
        e.getMessage();
    }
    super.onDestroy();
}

结果:图像仅显示一次。没有任何半图像。

【讨论】:

  • rclOfferlistview.setItemViewcacheSize(list.size()) 它在做什么?
  • 在 catch 中回收视图存储可见项目,如果您再次来到相同的项目,则回收视图显示存储视图而不是新创建视图。但是在销毁片段期间您需要清除捕获。我已经更新了代码。
  • 以上代码取自我正在运行的应用程序。我不知道你的代码有什么问题。我们使用“setImageDrawable”设置图像作为设置正常图像,为什么你面临半图像问题。可能是其他问题
猜你喜欢
  • 2020-11-20
  • 2018-10-29
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多