Использование точек на дюйм вместо пикселей на холсте.drawBitmap


Я прочитал "руководство по API поддержки экрана" (http://developer.android.com/guide/practices/screens_support.html) и гораздо больше ресурсов, но я не могу понять, как работает dpi.

Я разрабатываю игру, и я не использую никаких макетов (я собираюсь нарисовать все сам с помощью функций, таких как canvas.drawbitmap). Но когда я использую холст.Функция Drawbitmap мне нужно указать пиксели экрана, где я хочу нарисовать изображение.

Так что теперь я работаю с фиксированным разрешением (1280x800) и я использую папку drawable-nodpi и настраиваю холст позже, если экран телефона шире или узок. Проблема в том, что изображения выглядят ужасно, когда разрешение не является родным (1280х800).

Что я могу сделать, чтобы решить эту проблему? Я читал и читаю в течение 3 дней, но все объяснения и примеры связаны с макетами, девятью патчами и так далее.

1 2

1 ответ:

Получите плотность используемого устройства и умножьте эту плотность на некоторый базовый размер, который вы выберете (насколько большой или маленький вы на самом деле хотите, чтобы он был нарисован?)

Пример:

float objectToDrawHeight = 50; //Specified in plain pixels
float objectToDrawWidth = 50; //Specified in plain pixels

float density = getResources().getDisplayMetrics().density;
objectToDrawHeight *= density;
objectToDrawWidth *= density;

//Draw your object using the new (scaled) height and width
//If you are worried about how the object will look on different aspect ratio devices
//  you can get the screen dimensions and use that ratio as a multiplier
//  just as you did with density

Display display = ((Activity)context).getWindowManager().getDefaultDisplay();
float screenDimensionX = display.getWidth();
float screenDimensionY = display.getHeight();

Использование плотности и, возможно, размеров экрана должно позволить вам нарисовать что-либо и сохранить его масштаб правильно. При использовании canvas, предположим, что все в пикселях, и что вы должны сделать преобразование dpi.