2015-06-10 65 views
3

我使用Fresco在我的应用程序中下载和显示Gif。点击时我想将图像保存到SD卡,但我无法弄清楚如何去做。如何在使用Fresco时将图像保存到SD卡?

final View view = inflater.inflate(R.layout.fragment_gif_viewer, container, false); 
SimpleDraweeView draweeView = (SimpleDraweeView) view.findViewById(R.id.image); 
Uri uri = Uri.parse(imageUrl); 
DraweeController controller = Fresco.newDraweeControllerBuilder() 
     .setUri(uri) 
     .setAutoPlayAnimations(true) 
     .build(); 
draweeView.setController(controller); 

draweeView.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     // Save the gif to /sdcard/test.gif 
    } 
}); 

我尝试从SimpleDraweeView得到位图的How do I save an ImageView as an image?的指令之后,但它是getDrawingCache()返回null

回答

1

可以use the image pipeline directly提取从磁盘缓存您的GIF。

然后您可以使用Java File方法将其写入文件系统。

+0

我知道如何使用图像流水线时,谈到GIF保存静态图片如png.But,这是不同的。 –

2

你可以这样做

ImageRequest downloadRequest = ImageRequest.fromUri(uri); 
CacheKey cacheKey = DefaultCacheKeyFactory.getInstance().getEncodedCacheKey(downloadRequest); 
if (ImagePipelineFactory.getInstance().getMainDiskStorageCache().hasKey(cacheKey)) { 
    BinaryResource resource = ImagePipelineFactory.getInstance().getMainDiskStorageCache().getResource(cacheKey); 
    File cacheFile = ((FileBinaryResource) resource).getFile(); 
    FileInputStream fis = new FileInputStream(cacheFile); 
    ImageFormat imageFormat = ImageFormatChecker.getImageFormat(fis); 
    switch (imageFormat) { 
     case GIF: 
     //copy cacheFile to sdcard 
     break; 
    } 
} 
+0

您测试了此答案吗?它失败,发生空指针异常 –

+0

它对我的项目有效。请确保此GIF在磁盘缓存中获取。 – s1rius