2014-09-04 3 views
0

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

Я попытался сделать цикл, который берет вычитание на каждую итерацию и проверяет, станет ли отношение равным 16: 9, но двойное деление превращает его в бесконечный цикл, потому что 1920: 1080! = 16: 9, например

так может ли кто-нибудь дать мне лучший способ сделать это?

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

+0

Я не уверен, что не так с вашим кодом, но просто сделав разделение и умножение в голове, я могу сказать вам, что формат 1920x1080 * IS * с соотношением сторон 16: 9. 1920, деленный на 16, равен 120 и 120, умноженный на 9, равен 1080. – Squonk

+0

Это правда, мой друг. Я использовал плохой пример, чтобы продемонстрировать свою точку зрения, это будет справедливо для всех вариантов разрешения 16: 9, но когда это 4: 3, скажем, 480: 320, когда вы пытаетесь уменьшить 320 в цикле до тех пор, пока он не достигнет отношения, он никогда не будет точно равен 1.77777777, что является ответом на 1920/1080 это может быть 1.777777778, что сделает петли оценены как ложные и введите бесконечный цикл –

+1

Я до сих пор не понимаю вашу проблему. Если вы хотите отобразить изображение с соотношением сторон 16: 9, просто получите физическую ширину экрана в пикселях, а затем разделите на 16 (округлите до ближайшего целого), а затем умножьте на 9 на высоту.Затем вам просто нужно вычесть эти значения ширины и высоты из фактических значений ширины и высоты, делить на 2, а затем использовать соответствующие значения в качестве полей для верхнего/нижнего/левого/правого. – Squonk

ответ

4

В идеале вы хотите работать с шириной, максимально приближенной к «16» вашего желаемого соотношения 16: 9.

Давайте возьмем пример 480x320 ...

Если разделить 480/16 результат ровно 30. Умножение 30 * 9 270. Это означает, что вы можете использовать полную ширину 480, но вы должны отрегулируйте высоту так, чтобы 270 был меньше 320.

С высотой экрана 320 пикселей, но с желаемым соотношением сторон 16: 9 вам необходимо создать пустое верхнее и нижнее поля с общим 320 - 270 = 50. В чтобы получить равные высоты маржи, разделите на 2.

So ...

480/16 = 30

30 * 9 = 270

320 - 270 = 50

50/2 = 25

В основном вы можете использовать полную ширину экрана, но добавить верхнюю и нижний край по 25 пикселей каждый.

EDIT: Теперь предположим, что у вас необычный пример размера экрана 500x320 (маловероятно, но кто знает?).

В этом случае мы должны знать, что модуль (остаток), когда мы делим ширину экрана на 16 ...

int xPixels = 500; // Physical number of pixels on X axis 
int yPixels = 320; // Physical number of pixels on Y axis 
int leftMargin = 0; 
int topMargin = 0; 

// In the case of 500 width, the remainder will be 4 pixels 
// because 500/16 is 31 with a remainder of 4. 
int remainder = xPixels % 16; 

// Check to see if the remainder is 0. If it's not then we need a left margin... 
if (remainder != 0) 
    leftMargin = remainder/2; 

// Now calculate height of the image 
int imageHeight = xPixels/16 * 9; 

// Now check if image height is the same as the physical screen height 
// if it's not then calculate the top margin 
if (imageHeight != yPixels) 
    topMargin = (yPixels - imageHeight)/2; 

С выше кода вы должны быть в состоянии настроить на экран положение на основе верхнего и левого полей.

+0

ну спасибо! это то, чего я хотел, но осталось одно. нет ли разрешения, которое шире 16: 9? То есть есть ли разрешение, которое потребует обрезать ширину не высоту, чтобы получить разрешение 16: 9? –

+1

@HassanKhallouf: Надеюсь, мое редактирование, показывающее некоторый код, будет охватывать разные физические пиксели экрана и вычисляет верхние и левые поля, чтобы отрегулировать положение вашего графического окна. – Squonk

+1

Ты отличный человек, не можешь проголосовать за тебя достаточно! –

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