Android 中的 ImgIX - 如何使用 dpr 按密度缩放?
ImgIX in Android - how to use dpr for scaling per density?
我的意思是它的实际实现很直接,但我怎么知道要使用哪个 dpr 值来匹配 android 密度。文档说 dpr 从 1 到 8。Android 有 ldpi、mdpi ... xxxxhdpi。那么我怎样才能匹配这些呢?
此外,很难相信他们没有 android 文档部分来显示 android 给定不同密度的用法。
阅读有关 sourcesets 的 imgix 文档 .. 所以我得到了以下方案:
我在值资源目录中创建了两个整数文件来存储 dpr 值。
像这样:
*
values
|
integers.xml
values-mdpi
|
integers.xml
values- hdpi
|
integers.xml
//等所有屏幕密度,因为 android 向下缩放,所以必须做所有密度
*
在这些整数文件中的每一个中,我都根据密度找到了要使用的正确 dpr。所以在值文件夹中
我使用 2 作为默认值,然后 mdpi 和 hdpi 将有 1 和 1.5 等...
这里是要使用的比例因子:
来自这里:
ldpi = 0.00625 * 120 -> 0.75
mdpi = 0.00625 * 160 -> 1.0
hdpi =0.00625 * 240 -> 1.5
xhdpi = 0.00625 * 320 -> 2.0
xxhdpi = 0.00625 * 480 -> 3.0
xxxhdpi = 0.00625 * 640 -> 4.0
来自 here
例如,默认值是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="dpr">2</integer>
</resources>
和 mdpi:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="dpr">1</integer>
</resources>
和 hdpi:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<Integer name="dpr">2</integer> //this should be 1.5 but lazy to convert to double
</resources>
然后在构建 imgix 图像时的代码中,我这样调用相应的值:
params.put("dpr", "" + getResources().getInteger(R.integer.dpr));
整个调用在自定义视图中看起来像这样(在我的例子中):
final URLBuilder builder = new URLBuilder(baseUrl);
params.put("w", String.valueOf(getWidth()));
params.put("h", String.valueOf(getHeight()));
params.put("q", IMGIX_QUALITY);
params.put("auto", "compress");
params.put("dpr", "" + getResources().getInteger(R.integer.dpr));
params.put("fix", "max");
String url = builder.createURL(getImageId(), params);
//then send this off to picasso to cache. etc ...
我的意思是它的实际实现很直接,但我怎么知道要使用哪个 dpr 值来匹配 android 密度。文档说 dpr 从 1 到 8。Android 有 ldpi、mdpi ... xxxxhdpi。那么我怎样才能匹配这些呢? 此外,很难相信他们没有 android 文档部分来显示 android 给定不同密度的用法。
阅读有关 sourcesets 的 imgix 文档 .. 所以我得到了以下方案:
我在值资源目录中创建了两个整数文件来存储 dpr 值。
像这样:
*
values
|
integers.xml
values-mdpi
|
integers.xml
values- hdpi
|
integers.xml
//等所有屏幕密度,因为 android 向下缩放,所以必须做所有密度
*
在这些整数文件中的每一个中,我都根据密度找到了要使用的正确 dpr。所以在值文件夹中 我使用 2 作为默认值,然后 mdpi 和 hdpi 将有 1 和 1.5 等...
这里是要使用的比例因子:
来自这里:
ldpi = 0.00625 * 120 -> 0.75 mdpi = 0.00625 * 160 -> 1.0 hdpi =0.00625 * 240 -> 1.5 xhdpi = 0.00625 * 320 -> 2.0 xxhdpi = 0.00625 * 480 -> 3.0 xxxhdpi = 0.00625 * 640 -> 4.0
来自 here 例如,默认值是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="dpr">2</integer>
</resources>
和 mdpi:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="dpr">1</integer>
</resources>
和 hdpi:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<Integer name="dpr">2</integer> //this should be 1.5 but lazy to convert to double
</resources>
然后在构建 imgix 图像时的代码中,我这样调用相应的值:
params.put("dpr", "" + getResources().getInteger(R.integer.dpr));
整个调用在自定义视图中看起来像这样(在我的例子中):
final URLBuilder builder = new URLBuilder(baseUrl);
params.put("w", String.valueOf(getWidth()));
params.put("h", String.valueOf(getHeight()));
params.put("q", IMGIX_QUALITY);
params.put("auto", "compress");
params.put("dpr", "" + getResources().getInteger(R.integer.dpr));
params.put("fix", "max");
String url = builder.createURL(getImageId(), params);
//then send this off to picasso to cache. etc ...