如何在Android中在没有问题的情况下在回收视图中加载许多图像

时间:2019-03-22 16:43:47

标签: android

我使用Glide库使用RecyclerView将我的图像从存储库加载到imageView

一切都很好

但是当很多应用程序的图像崩溃或应该等待这么长时间才能完全加载活动 这是我的代码

    public static File DIR_IMG = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM), "MyHairSamples");

    private void readExistingImages(){
    File[] images;
    try {
        images= DIR_IMG.listFiles();
        for (int i = 0; i < images.length; i++) {
            if (images[i].isFile() && images[i].length() > 50L) {
                Bitmap b = BitmapFactory.decodeFile(images[i].getAbsolutePath());
                addImage(b, "5", images[i].getName());
            }
            else{
                images[i].delete();
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

我在onCreate方法中使用了此方法

这是我的适配器代码

@Override
public void onBindViewHolder(@NonNull MyViewHolder viewHolder, int i) {
    viewHolder.title.setText(arrayList.get(i).getImageTitle());
    viewHolder.thumbnail.setLabelFor(i);
    Glide.with(context)
            .load(arrayList.get(i).getImage())
            .into(viewHolder.thumbnail);
}

2 个答案:

答案 0 :(得分:0)

当图像分辨率较大时,加载会很慢,甚至您的应用程序也会崩溃。

因此您可以像这样调整图像集的大小

  Glide.with(context)
        .load(arrayList.get(i).getImage())
        .apply(new RequestOptions().override(400, 400))
        .into(viewHolder.thumbnail);

编辑

  RequestOptions reqOpt = RequestOptions
                        .fitCenterTransform()
                        .diskCacheStrategy(DiskCacheStrategy.ALL)
                        .override(300,300)

答案 1 :(得分:0)

将图像加载到uithread内,它不会中断主线程。

使用以下代码。

For example if A = [10, 20, 40, 60] and B =[15, 35, 50, 70, 100] and K = 4 
then solution should be 35 because union of above arrays will be C = 
[10,15,20,35,40,50,60,70,100] and fourth smallest element is 35.