下载前如何设置imageView的大小

How to set size of imageView before downloading

在我的 android 应用程序中,我使用 Fresco 实现了 imageview,因为图像是 GIF。并且图像是从使用 node.js

制作的服务器提供的

有 instagram-like 时间线,但图片是 GIF。问题是在下载照片之前,图像视图被设置为默认大小,如 200x200。然后图片下载完成后,就变成实际大小了。 我希望 imageview 的大小与实际大小相同,甚至在加载之前也是如此。我看到大多数商业应用程序,imageview 的大小甚至在加载之前就已经设置为原始大小。

我想知道实现它的最佳方法是什么。

我在想,当服务器向客户端发送 post 的描述时,例如图像 url、标题、内容、喜欢的数量,是否也应该发送尺寸?喜欢

{elements:[{
             url:"http://blah.com/image.jpg",
             title:"this is the title",
             photo_width:300,
             photo_height:500,
             and other stuffs
           },
           {another element},
           {so on}]
}

或者 Fresco 是否有解决这个我不知道的方法?

我认为 Fresco 没有涵盖这个用例。

任何主要的网络浏览器,例如Chrome,都可以在图片实际加载之前获取宽度和高度,因为一旦浏览器加载文件头,它就会有图片的宽度和高度。

但是Fresco的ControllerListener好像没有beforeDownload(@Nullable ImageInfo imageInfo),所以要等图片加载完才能得到实际大小

即使是您提到的库 'image-size' 也声称您不需要下载整个图像来获得大小,我不明白为什么 Fresco 做不到。也许我们应该向 Fresco 团队提出建议。

编辑:
嘿,我在搜索 github 时发现了这个很棒的库: https://github.com/qstumn/FastImageSize

无需下载整个文件即可获取图片大小,使用方便

int[] imageSize;
//sync
imageSize = FastImageSize.with(url).get();

//async
FastImageSize.with(url).get(new FastImageSize.ImageSizeCallback() { 

       @Override   
       public void onSizeReady(int[] size) { 
            imageSize = size;
       }
});

int imageWidth = imageSize[0];
int imageHeight = imageSize[1];