2014-01-13 2 views
0

Я провел тестовую игру, используя этот учебник http://www.kilobolt.com/day-6-the-android-game-framework-part-ii.html, и теперь я хочу сделать настоящую игру для публикации в магазине игр.Android - Поддержка нескольких экранов проблемы с холстом

Я хочу, чтобы моя игра поддерживала различные размеры экрана. Поэтому, прочитав много, я теперь знаю, что я должен указать разные макеты для разных размеров экрана. Но я не знаю, что делать с некоторым кодом из учебника.

Это в основном имеет что-то вроде этого:

int frameBufferWidth = 800; 
int frameBufferHeight = 480; 
Bitmap frameBuffer = Bitmap.createBitmap(frameBufferWidth, frameBufferHeight, Config.RGB_565); 

, который затем используется для создания холста:

this.canvas = new Canvas(frameBuffer); 
  • Как адаптироваться, что в макетах?
  • Являются ли эти размеры в пикселях?
  • Должен ли я передавать их значениям dp?
  • Должен ли я указывать эти значения ширины и высоты в макетах xml?

Я думаю, правильный ответ состоял бы в том, чтобы передать их dp на код, но даже в этом случае я действительно не знаю, как это сделать.

Я задал тот же вопрос на веб-сайте учебника, но пока не получил ответа, пожалуйста, помогите.

ответ

0

UPDATE

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

Если вы кодируете строку состояния, вы всегда хотите, чтобы она была того же размера независимо от размера экрана - для этого используйте px. Я не вижу, как вы можете это сделать с помощью dp.

С другой стороны, скажем, у вас есть изображение, которое вы хотите быть ровно в половине экрана - у вас есть несколько вариантов. Если вы делаете это в коде, вы можете использовать либо по скорости, что это незначительно. Если вы делаете это в xml, вы можете либо установить его на 80dp напрямую, либо (и это то, что я делаю), просто используйте linearlayouts с весами.

Если честно, я никогда не использую dp, но в некоторых случаях я полностью его вижу. Я использую пиксели и взвешенные макеты для всего, и я могу делать все так. Возьмите его за то, что он стоит, но я чувствую, что это более точно, может получить лучшее разрешение, лучше расширяется для разных размеров экрана и более интуитивно. Но если вы предпочитаете использовать dp, сделайте это. Это действительно то, с чем вам комфортнее. Оба способа вполне приемлемы, и тот, кто вам говорит, лучше, чем другой, просто прекратите слушать.


В вашей деятельности, попробуйте использовать:

Point size = new Point(); 
getWindowManager().getDefaultDisplay().getSize(size); 
int frameBufferWidth = size.x; 
int frameBufferHeight = size.y; 

Однако, это только для ИЗА> 13. Для более ранних версий используйте:

DisplayMetrics metrics = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(metrics); 
int frameBufferHeight = metrics.heightPixels; 
int frameBufferWidth = metrics.widthPixels; 

ПРИМЕЧАНИЕ. Эти функции получают размер в пикселях.конвертировать между рх и дп, вы можете сделать это:

float factor = getResources().getDisplayMetrics().density; 
int realwidth = (int) Math.round(width/factor); <--to convert px to dp 
//int realwidth = (int) Math.round(width*factor); <--to convert dp to px 
+0

Итак, getWindowManager() getDefaultDisplay() GETSIZE (размер) получает размер экрана устройства на рх или дп..? – Adocad

+0

getWindowManager(). GetDefaultDisplay(). GetSize (size) возвращает пиксели (px) – dberm22

+0

Спасибо за ответ, эти методы действительно полезны. Но мой главный вопрос остается. Что мне делать? Как вы думаете, лучше передать эти значения в dp? – Adocad

Смежные вопросы