是否可以在运行时从给定的 URL 加载 hdpi、mdpi 和 ldpi 的可绘制对象并使用它们?
如果没有,我该如何克服密度问题?
根据屏幕密度,您可以设置图像 URL,
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch(metrics.densityDpi){
case DisplayMetrics.DENSITY_LOW:
url = "your_ldpi_url";
break;
case DisplayMetrics.DENSITY_MEDIUM:
url = "your_mdpi_url";
break;
case DisplayMetrics.DENSITY_HIGH:
url = "your_hdpi_url";
break;
}
您可以获取该图像并使用,
try {
InputStream is = (InputStream) this.fetch(url);
image = Drawable.createFromStream(is,"src");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
不可能。构建项目后,您无法执行此操作。用这个:
res/drawable-ldpi/my_icon.png // bitmap for low density
res/drawable-mdpi/my_icon.png // bitmap for medium density
res/drawable-hdpi/my_icon.png // bitmap for high density
res/drawable-xhdpi/my_icon.png // bitmap for extra high density
如果您真的非常想要,您可以在运行时获取屏幕密度并根据结果下载位图。但是,这是支持多种屏幕密度的一种非常低效的方法,应该避免。
如果您需要适当调整必须下载的图像(而不是每次运行时都会出现的图像)的大小,请查看BitmapDrawable类。