当前位置: 首页 > 知识库问答 >
问题:

下载所有图像,然后将其显示在recyclerview中

臧兴学
2023-03-14

我有一个回收视图,我将在其中显示9幅图像。所有这些图像都在服务器上。我正在使用Glide下载适配器的onBindViewHolder中的图像。问题是,如果互联网速度慢,Glide将需要时间下载图像并显示。在下载图片之前,我的Recyclerview是空的,没有显示任何内容。我想显示一个进度条,直到所有的图片都被下载。下载所有图像后,将隐藏进度栏,并显示所有9个图像。

这是我的适配器:

public class PuzzleGridAdapter extends RecyclerView.Adapter<PuzzleGridAdapter.MyViewHolder> implements ItemTouchHelperAdapter {
    List<String> itemList;
    LayoutInflater inflater;
    Context context;
    private final OnStartDragListener mDragStartListener;

    public PuzzleGridAdapter(Context context, OnStartDragListener dragStartListener) {
        this.context = context;
        mDragStartListener = dragStartListener;
        inflater = LayoutInflater.from(context);
        itemList = new ArrayList<>();
    }

    public void getItemList(List<String> nameList) {
        int currentSize = itemList.size();
        itemList.clear();
        itemList.addAll(nameList);
        notifyItemRangeRemoved(0, currentSize);
        notifyItemRangeInserted(0, nameList.size());
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.custom_puzzle_row, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(final MyViewHolder holder, int position) {
        Log.e("PuzzleGridAdapter", itemList.get(position));

//        holder.textView.setTag(itemList.get(position));
//        new DownloadTask().execute(holder.textView);
        Glide.with(context).load(itemList.get(position)).asBitmap().override(200,200).listener(new RequestListener<String, Bitmap>() {
            @Override
            public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
                Log.e("PuzzleGridAdapter", e.getMessage());
                return false;
            }

            @Override
            public boolean onResourceReady(Bitmap resource, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
                Log.e("PuzzleGridAdapter", "ready");
                return false;
            }
        }).diskCacheStrategy(DiskCacheStrategy.RESULT).into(holder.textView);
        //holder.textView.setImageResource(itemList.get(position));
        // Start a drag whenever the handle view it touched
        holder.cardView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
                    mDragStartListener.onStartDrag(holder);
                }
                return false;
            }
        });
    }


    @Override
    public int getItemCount() {
        Log.e("PuzzleGridAdapter", itemList.size() + "");
        return itemList.size();
    }

    public List<String> getUpdateList() {
        return itemList;
    }

    @Override
    public boolean onItemMove(int fromPosition, int toPosition) {
        String item = itemList.remove(fromPosition);
        itemList.add(toPosition, item);
        notifyItemMoved(fromPosition, toPosition);
        return true;
    }

    @Override
    public void onItemDismiss(int position) {
        itemList.remove(position);
        notifyItemRemoved(position);
    }

    public class MyViewHolder extends RecyclerView.ViewHolder implements ItemTouchHelperViewHolder {

        CardView cardView;
        ImageView textView;

        public MyViewHolder(View itemView) {
            super(itemView);
            cardView = (CardView) itemView.findViewById(R.id.gameCard);
            textView = (ImageView) itemView.findViewById(R.id.kolamImage);
        }

        @Override
        public void onItemSelected() {
            itemView.setBackgroundColor(Color.LTGRAY);
        }

        @Override
        public void onItemClear() {
            itemView.setBackgroundColor(Color.WHITE);
        }
    }
}

在下载所有内容之前,如何显示Progressbar

共有1个答案

施海
2023-03-14

从示例https://stackoverflow.com/questions/aa获得帮助,并将这样的代码添加到广告:

Glide.with(this)
            .load("https://www.wonderplugin.com/wp-content/plugins/wonderplugin-lightbox/images/demo-image0.jpg")
            .listener(new RequestListener<String, GlideDrawable>() {
                @Override
                public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                    progressBar.setVisibility(View.GONE);
                    return false;
                }

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

在回收器视图项目的Imageview上添加进度条。

 类似资料:
  • 问题内容: 如何显示指定目录中的图像?就像我要显示目录中的所有png图像一样,我的目录是media / images / iconized。 我试图环顾四周,但似乎它们都不符合我的实际需求。 但是,这是我的尝试。 希望这里有人可以帮忙。我对任何想法,建议和建议持开放态度,谢谢。 问题答案: 您也可以使用以下方法:

  • 问题内容: 我想使用Java读取文件夹中的所有图像。 什么时候: 我按下Java应用程序中的按钮, 它应该: 在弹出窗口中询问目录的路径, 然后 从该目录加载所有图像, 然后 显示其名称,尺寸类型和尺寸。 如何进行? 我有用于读取图像以及文件夹中所有图像的代码,但是我上面所说的事情如何完成? 欢迎任何建议或帮助!请提供参考链接! 问题答案: 未经测试,因为未在装有JDK的计算机上进行测试,所以请耐

  • 我正在创建一个图像库,在单击时显示图像的模式和一些附加信息。数据是从嵌入的json字符串中提取的。该模式在一个大框架中显示正确的图像,但也显示下面的其他图像。如何防止显示其他图像? 非常感谢! 这是JSON: 这是HTML: 这将JSON放在div中: 这就是模态: var modal=文档。getElementById('myModal');

  • 它将我带到图库以选择图像,但未显示在应用程序中,当单击上传按钮时,它只是一个空白图像视图 < li >我的Java代码 < li>XML代码 运行时显示此错误 java.lang.IllegalArgumentException:uri不能为空 以下两处给出错误的行显示了uri错误

  • 问题内容: 这是我的代码。它不会在框架中显示图像,而是显示一些文本。有人可以建议我,我应该对代码进行哪些更改,以便可以在框架中显示图像? 问题答案: 请注意,我不会以这种方式设计代码,但是我希望使它尽可能接近原始代码,同时使其能够在基于Windows的框中显示图像列表。 列表显示

  • 问题内容: 如何处理HTML页面中的TIFF文件? 我想在HTML页面中显示TIFF文件。 我尝试使用嵌入式标签,对象ID,IMG等。但是我无法在HTML页面中显示图像(TIFF)。 我在项目中没有使用Java,.NET或其他任何东西。我仅使用HTML。 更新:Safari支持TIFF图像加载。如何在其他浏览器(IE,Mozilla,Firefox等)中加载TIFF图像? 我无法安装第三方插件或控