Как определить, какой растровый ресурс был загружен (ldpi, mdpi или hdpi)? - PullRequest
3 голосов
/ 14 ноября 2010

Я создал несколько растровых изображений - по одной для каждой папки (mdpi, hdpi, ldpi).Может кто-нибудь показать мне какой-нибудь код или указать соответствующий метод, который позволит мне определить, какой ресурс Android решил загрузить.

Спасибо,

Ответы [ 4 ]

4 голосов
/ 15 ноября 2010

Получить плотность DPI из DisplayMetric и сравнить его с предварительно определенными константами

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

switch(metrics.densityDpi)
{
case DisplayMetrics.DENSITY_HIGH: //HDPI
case DisplayMetrics.DENSITY_LOW:  //LDPI
case DisplayMetrics.DENSITY_MEDIUM: //MDPI
}
2 голосов
/ 15 ноября 2010

Это доступно в самом растровом изображении - http://developer.android.com/reference/android/graphics/Bitmap.html#getDensity()

Если вы загружаете это с помощью API-интерфейса Resources.getDrawable () более высокого уровня, у вас не будет растрового изображения, а будет только абстрактный Drawable. Если вы можете гарантировать, что ресурс всегда будет растровым (а не девятью патчами или чем-то подобным), вы можете преобразовать его в BitmapDrawable и получить растровое изображение из этого.

Если вы делаете это для производственного кода, мне было бы немного неудобно с этим, так как обычно приложение должно либо позволить платформе заботиться о плотности, либо позаботиться обо всем этом самостоятельно (например, помещая растровые изображения в прорисовываемые -nodpi). Если вы играете в игры с битовой картой, основанной на загруженной плотности, вы можете выстрелить себе в ногу. Или вы можете быть в порядке, так как я действительно не знаю, что вы делаете. :)

1 голос
/ 15 ноября 2010

Я не уверен, что можно делать с кодом, но для целей тестирования я добавил маленький значок с именем resolution.png, в котором была версия в ldpi с буквой «l», в версии для mdpi была буква'm' в нем, а версия для hdpi содержала букву 'h'.Таким образом, вы можете увидеть, какая версия ресурсов загружается.

Я тестирую ее, закомментировав ее в макете большую часть времени, и отменяю комментарии, когда хочу исследовать.

0 голосов
/ 15 ноября 2010

Загрузите растровое изображение напрямую и сравните его с загруженным через ресурсы:

Ресурсы могут быть доступны как необработанные данные: используйте AssetManager.open (..) Затем вы можете использовать BitmapFactory.decodeStream (..) для создания растрового изображения из потока данных.

...