这是因为屏幕和图像的密度不同。那么如果你没有指定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
太棒了。感谢帮助。 –