如何使Glide使用先前下载的图像作为占位符

时间:2018-07-10 13:13:33

标签: android android-glide

在下载新图像时是否可以在Glide中将以前下载的图像显示为占位符。

就像我使用滑行将图像加载到imageview中一样。现在,更改了imageurl,因此在加载此新图像时,可以继续显示旧图像(可能来自缓存)。

我想要的是从URL加载新图像时,是否可以将当前图像保留为占位符。

2 个答案:

答案 0 :(得分:1)

我在这里的讨论中找到了答案-https://github.com/bumptech/glide/issues/527#issuecomment-148840717

直觉上,我还考虑过使用placeholder(),但是问题是,一旦加载第二张图像,您就会失去对第一张图像的引用。您仍然可以引用它,但是它不安全,因为它可能会被Glide重新使用或回收。

讨论中提出的解决方案是使用thumbnail()并再次加载第一张图像。加载将立即从内存缓存中返回第一张图像,并且看起来该图像直到加载第二张图像之前都没有改变:

String currentImageUrl = ...;
String newImageUrl = ...;

Glide.with(this)
    .load(newImageUrl)
    .thumbnail(Glide.with(this)
        .load(currentImageUrl)
        .fitCenter()
    )
    .fitCenter()
    .into(imageView);

答案 1 :(得分:0)

Glide具有从该url获取图像的位图的功能,因此只需获取它,然后将其保存到手机的所需存储中,然后在.placeholder()中,当您处于尝试获取其他图像,请看一下此片段

/** Download the image using Glide **/

Bitmap theBitmap = null;
theBitmap = Glide.
    with(YourActivity.this).
    asBitmap().
    load("Url of your image").
    into(-1, -1).
    get(); //with this we get the bitmap of that url

   saveToInternalStorage(theBitmap, getApplicationContext(), "your preferred image name");

/** Save it on your device **/

public String saveToInternalStorage(Bitmap bitmapImage, Context context, String name){


        ContextWrapper cw = new ContextWrapper(context);
        // path to /data/data/yourapp/app_data/imageDir

        String name_="foldername"; //Folder name in device android/data/
        File directory = cw.getDir(name, Context.MODE_PRIVATE);

        // Create imageDir
        File mypath=new File(directory,name_);

        FileOutputStream fos = null;
        try {

            fos = new FileOutputStream(mypath);

            // Use the compress method on the BitMap object to write image to the OutputStream
            bitmapImage.compress(Bitmap.CompressFormat.PNG, 100, fos);
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.e("absolutepath ", directory.getAbsolutePath());
        return directory.getAbsolutePath();
    }

/** Method to retrieve image from your device **/

public Bitmap loadImageFromStorage(String path, String name)
    {
        Bitmap b;
        String name_= name; //your folderName
        try {
            File f=new File(path, name_);
            b = BitmapFactory.decodeStream(new FileInputStream(f));
            return b;
        }
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        }
        return null;
    }




/** Retrieve your image from device and set to imageview **/
//Provide your image path and name of the image your previously used.

Bitmap b= loadImageFromStorage(String path, String name)
ImageView img=(ImageView)findViewById(R.id.your_image_id);
img.setImageBitmap(b);