【问题标题】:Replace image without server request using Fresco使用 Fresco 替换没有服务器请求的图像
【发布时间】:2015-07-08 21:26:40
【问题描述】:

我想知道是否有一种方法可以替换 Fresco 中的图像,而无需从服务器重新加载它。我有一个应用程序,可以让用户修改图像,然后将新图像上传到服务器。但是,对于 Fresco 的工作方式,我需要上传新图像,从缓存中删除当前图像,然后使用新 url 从服务器检索它,然后将其存储在缓存中。我似乎找不到仅使用 url 和位图作为键和值(如果可能的话)将图像插入缓存的方法。

【问题讨论】:

    标签: java android image-loading fresco


    【解决方案1】:

    Fresco 目前不支持此功能,但您可以尝试以下方法:

    // remove the image from the caches (both disk and memory)
    CacheKey diskCacheKey = new SimpleCacheKey(uri.toString());
    Fresco.getImagePipelineFactory().getMainDiskStorageCache().remove(diskCacheKey);
    Fresco.getImagePipeline().evictFromMemoryCache(uri);
    
    // fill the disk cache (note, memory cache will be filled automatically)
    Supplier<FileInputStream> inputStreamSupplier = new Supplier<FileInputStream>() {
      @Override
      public FileInputStream get() {
        return new FileInputStream(path);
      }
    };
    EncodedImage encodedImage = new EncodedImage(inputStreamSupplier);
    Fresco.getImagePipelineFactory().getMainBufferedDiskCache().put(diskCacheKey, encodedImage);
    
    // re-set the image to the view
    mSimpleDraweeView.setImageUri(uri);
    

    【讨论】:

    • Fresco.getImagePipelineFactory().getMainBufferedDiskCache().put(diskCacheKey, encodedImage);在壁画中具有私人访问权限...我可以尝试将其分叉并将其公开
    【解决方案2】:

    第一:

    mSimpleDraweeView.setImageUri(null) 删除缓存

    第二个:

    mSimpleDraweeView.getHierarchy().setPlaceholderImage(drawable);放置一个drawable以显示本地图像;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-27
      • 1970-01-01
      • 1970-01-01
      • 2015-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多