如何在下载前设置imageView的大小

时间:2017-02-05 17:59:44

标签: android node.js fresco

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

制作的服务器中提供的

有类似Instagram的时间轴,但图像是GIF。问题是在下载照片之前,图像视图设置为默认大小,如200x200。然后在下载图像后,它变为实际大小。 我希望imageview的大小与实际大小相同,甚至在加载之前。我已经看到大多数商业应用程序,即使在加载之前,imageview的大小已经设置为原始大小。

我想知道实现这一目标的最佳方法是什么。

我在想,当服务器向客户端发送帖子的描述时,如图片网址,标题,内容,喜欢的数量,是否应该发送尺寸?像

{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是否有办法解决这个我不知道的问题?

1 个答案:

答案 0 :(得分:1)

我不认为Fresco涵盖了这个用例。

任何主要的网络浏览器(例如Chrome)都可以在实际加载图片之前获得宽度和高度,因为只要浏览器加载文件标题,它就会有图像的宽度和高度。

但Fresco的ControllerListener似乎没有beforeDownload(@Nullable ImageInfo imageInfo),因此您必须等待图像完全加载才能获得实际大小。

即使是lib'图片大小'你提到声称你不需要下载整个图像来获得尺寸,我不明白为什么Fresco不能这样做。也许我们应该向Fresco团队提出建议。

编辑:
嘿,我发现这个很棒的lib搜索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];