获得API级别< 15的密度可绘制

时间:2012-02-20 10:25:30

标签: android

从Android API Level 15开始,method public Drawable getDrawableForDensity (int id, int density)可以检索特定屏幕密度的可绘制对象。在API级别15之前有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

所以我实际上认为可以根据@ adtennant的建议使用Android API的逆向工程和源代码来解决。我开始编写解决方案,但是在这个过程中,由于必要的底层本机(非Java)API在Android的更高版本中不可用,因此在此过程中处于死胡同。

如果您可以将此限制为只有位图,正如您的评论所暗示的那样,可以按照建议使用BitmapFactory执行此操作。 BitmapFactory有另一种方法:

  

decodeResource(Resources res, int id, BitmapFactory.Options opts)

此方法接受额外的BitmapFactory.Options,这将允许您指定要加载的密度。这似乎自API级别1以来就存在。具体来说,我相信您可以使用:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inDensity = DisplayMetrics.DENSITY_MEDIUM; // whichever you want to load
options.inTargetDensity = getResources().getDisplayMetrics().densityDpi;
options.inScaled = true;

如果加载了不匹配的密度,这也会将其缩放到屏幕密度。