android – Fresco:使用Drawee中显示的当前图像作为下一个请求的占位符

我在同一个SimpleDraweeView上按顺序播放多个图像,问题是当提交新的imageURI请求时,SimpleDrweeView将删除当前显示的图像,并在下载URI之前将其替换为空.因此,它将在播放序列中留下空白(您可以想到我正在尝试做的是使用本地照片的卡通动画).我希望SimpleDrweeView能够保留当前图像,直到下载新图像,然后在准备就绪时将其交换.

我尝试使用this票的低分辨率/高分辨率方案将旧的uri作为占位符但是没有用(具有与之前相同的效果).

这就是我现在拥有的:

 SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);

 draweeView.setimageURI(uri /* local image */); 

这是我到目前为止尝试过的(不起作用):

                SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);

            Uri lowResUri,highResUri;
            DraweeController controller = Fresco.newDraweeControllerBuilder().setTapToRetryEnabled(true)
                    .setLowResImageRequest(ImageRequest.fromUri((Uri) draweeView.getTag())) /*naive way to test the low/high res feature*/
                    .setimageRequest(ImageRequest.fromUri(uri))
                    .setoldController(draweeView.getController())
                    .build();
            draweeView.setTag(uri);
            draweeView.setController(controller); 
最佳答案
我是Fresco团队的一员,也许可以提供帮助.
奇怪的是,您遇到与低分辨率/高分辨率组合相同的问题.如果当前显示图像,则表示它应位于位图内存高速缓存中,这意味着下次切换到下一帧时,它应该能够在设置为低分辨率图像时立即加载.
您确定要将正确的uri设置为低分辨率图像吗? (Uri)draweeView.getTag()看起来有点可疑.我会仔细检查那部分.

如果uri确实是正确的,但是图像不再位于位图缓存中,那么值得研究为什么可见的图像不再被缓存,因为我们有明确的逻辑来防止驱逐可见图像.了解如何使用详细日志记录here跟踪此情况.

如果以上所有都失败了,第三个选项是实际实现你自己的DataSource.我可以帮助你,但这可能有点牵连.基本思想是实现一个DataSource,它包装另一个实际提供图像的DataSource.然后你可以做这样的事情:

// keep this instance somewhere
mMyDataSourcesupplier = new MyDataSourcesupplier();

// build controller by specifying your custom datasource supplier instead of specifying any URIs.
Fresco.newDraweeControllerBuilder()
  .setDataSourcesupplier(mMyDataSourcesupplier)
  .build()

// later,when you need to change the image do
mMyDataSourcesupplier.setUri(nextUri);

// this is just an outline
class MyDataSourcesupplier implements suppliertimagePipeline().fetchDecodedImage(ImageRequest.fromUri(uri),null);
        mUnderlyingDataSource.subscribe(new BaseDataSubscriber {
          @Override
          protected void onNewResultImpl(DataSource

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...