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