2016-11-11 31 views
0

在我的应用程序中,我想显示16:9的完整设备宽度(人像)横幅图像。我使用毕加索从我拥有的后端服务提供的URL下载/显示图像。从服务器中载入Android中的可变图像尺寸

我的问题是:什么是人们用来做这种事情的一些策略?

注意:我搜索了各种想法并没有找到太多具体的帮助。

解决方法A:

浮现在脑海中的一些方法有服务鬻高分辨率图像,并与毕加索调整其大小。 优点:简单,不需要为哪张照片抓取逻辑。 缺点:小型设备将需要使用带宽&存储空间以无法显示的分辨率下载图像。

方法B: 对服务5个不同版本的图像(MDPI,华电国际,xhdpi,xxhdpi,& xxxhdpi)并获取每一种根据我从,称像这样的设备:

File ext   Dimensions 
------------------------------ 
_mdpi.jpg   360x203 
_hdpi.jpg   540x304 
_xhdpi.jpg   720x405 
_xxhdpi.jpg   1080x608 
_xxxhdpi.jpg  1440x810 

这看起来好像可以用于手机,但是一旦我将平板电脑投入混合使用会变得更加混乱。继此之后,我可以像Android那样使用最小宽度限定符,并从服务中售出更多图像。因此沿线的东西...

File ext   Dimensions 
------------------------------ 
_mdpi.jpg   360x203 
_hdpi.jpg   540x304 
_xhdpi.jpg   720x405 
_xxhdpi.jpg   1080x608 
_xxxhdpi.jpg  1440x810 
_sw600-mdpi.jpg  600x338 
_sw600-hdpi.jpg  800x450 
_sw600-xhdpi.jpg 1200x675 
... 
_sw720-mdpi.jpg  720x405 
_sw720-hdpi.jpg  1080x608 
_sw720-xhdpi.jpg 1440x810 
... 

但这并不处理更大规模的设备(例如,像素C)具有的900dp的宽度(作为“sw720-xhdpi” 1440x810图像将需要放大到1800x1013)。

优点:我正在下载非常接近正确的大小为每个设备显示。 缺点:似乎过于复杂,因为我现在需要添加许多不同的副本,并有设备代码,可以找出我正在使用什么类型的设备,并从服务中获取正确的图像。

方法C:您的方法在这里。

我可能正在寻找一个中间人,或者如果您完成了一些完全不同的事情,我也很乐意听到。

+1

为什么不只存储最高分辨率的图像服务器端,并使用服务器端逻辑根据屏幕尺寸参数调整大小并提供所需的分辨率? –

+0

绝对是我没有考虑过的一个选项。现在,服务器发回一个图像的URL,这是很好的,然后交给图书馆下载/缓存/显示。您是否用这种方法暗示我们将在服务电话中提供实际图像?我喜欢这个想法来简化应用程序决策代码,但是如果我现在必须自行缓存和下载,我不确定它是否值得。 – acommoner

+0

使用LRUCache进行缓存和下载确实不是很困难,但更持久的缓存会更复杂一些 –

回答

0

如果它在将来帮助任何人,我最终做了一个选项B的形式,使用3种不同的桶尺寸来提供图像。这些桶基于屏幕宽度,如下所示:S:0-599px,M:600-1199px,L:1200 + px。

不一定是最优雅的,但到目前为止一直工作得很好。

相关问题