Использование точек на дюйм вместо пикселей на холсте.drawBitmap
Я прочитал "руководство по API поддержки экрана" (http://developer.android.com/guide/practices/screens_support.html) и гораздо больше ресурсов, но я не могу понять, как работает dpi.
Я разрабатываю игру, и я не использую никаких макетов (я собираюсь нарисовать все сам с помощью функций, таких как canvas.drawbitmap). Но когда я использую холст.Функция Drawbitmap мне нужно указать пиксели экрана, где я хочу нарисовать изображение.
Так что теперь я работаю с фиксированным разрешением (1280x800) и я использую папку drawable-nodpi и настраиваю холст позже, если экран телефона шире или узок. Проблема в том, что изображения выглядят ужасно, когда разрешение не является родным (1280х800).
Что я могу сделать, чтобы решить эту проблему? Я читал и читаю в течение 3 дней, но все объяснения и примеры связаны с макетами, девятью патчами и так далее.
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.