這是因爲屏幕和圖像的密度不同。那麼如果你沒有指定Options
系統會爲你做。在BitmapFactory
源,你可以看到這一點:
public static Bitmap decodeResourceStream(Resources res, TypedValue value, InputStream is, Rect pad, Options opts) {
if (opts == null) {
opts = new Options();
}
if (opts.inDensity == 0 && value != null) {
final int density = value.density;
if (density == TypedValue.DENSITY_DEFAULT) {
opts.inDensity = DisplayMetrics.DENSITY_DEFAULT;
} else if (density != TypedValue.DENSITY_NONE) {
opts.inDensity = density;
}
}
if (opts.inTargetDensity == 0 && res != null) {
opts.inTargetDensity = res.getDisplayMetrics().densityDpi;
}
return decodeStream(is, pad, opts);
}
因此防止結垢,你需要與inScaled=false
PARAM指定Options
PARAM。或將您的圖像放到res/drawable-nodpi
文件夾中。
我只是使用臨時圖形,直到我遇到一個平面設計師,所以我只有幾個靜態大小的圖像爲我的設備。我認爲無密度不縮放,我不知道'-nodpi'指令。 –
對,'drawable'目錄假設您希望圖像在所有設備上具有相同的物理尺寸(即自動縮放),因爲這幾乎總是正確的事情(很少需要圖形的物理尺寸取決於顯示器的密度),爲什麼這是默認值,爲什麼'-nodpi'存在於特殊情況下。 – ianhanniballake
太棒了。感謝幫助。 –