Плотность независимости

1

В центре моего приложения есть круглый круг. С разрешением 480x800 все отлично, но с разрешением 320x480 круг слишком мал. У меня есть circle.png в папке drawable-hdpi с 470px x 470px. Я попытался добавить circle.png с 310x310 в папку drawable-mdpi, но результат был тот же. Это код макета xml:

<ImageView
    android:id="@+id/indicator"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:adjustViewBounds="true"
    android:scaleType="fitCenter"

    />

Возможно ли, что круг имеет лишь несколько пикселов, расстояние до левого и правого краев дисплея в каждом разрешении?

http://imageshack.us/photo/my-images/857/apppv.jpg/

EDIT: Я решил эту проблему в конце концов следующим образом:

LayoutParams lp = indicator.getLayoutParams();
lp.width = (int) (disW-(disW*0.06));
lp.height = (int) (disW-(disW*0.06));
indicator.setLayoutParams(lp);

//Это работает отлично, а соотношение сторон правильное.

EDIT2: Это не решение вообще, потому что качество изображения масштабированного изображения действительно плохо... но я нашел два учебника: http://developer.sonymobile.com/wp/2011/06/27/how- to-scale-images-for-your-android% E2% 84% A2-приложение/ http://android.creid.eu/how-to-resize-an-image-and-preserve-quality/

Мне нужно разобраться, что является лучшим способом...

  • 0
    Вы должны пометить это с помощью [android-layout] вместо [layout] :)
Теги:
android-layout
resolution

3 ответа

1
Лучший ответ

Мои первые мысли - очистить ваши разрешения.

Ваши изображения имеют численно неудобные размеры. 470 = 2 * 5 * 47. Хотя с чисто теоретико-числовой точки зрения 47 - увлекательное число, это не делает вам ничего хорошего, потому что он не может быть разложен в вашу пользу. Ваше другое измерение, 310 = 2 * 5 * 31, не лучше. Проблема в том, что вы работаете с (относительно говоря) большими штрихами 47 и 31. Я не знаю, как выглядит ваш главный образ, но, предполагая, что у вас есть только 470x и 310x, это мое предложение по масштабированию 470x вверх, да до 480x и от него получить все ваши меньшие изображения. Мое рассуждение следует.

Мой подход к размерам изображений

Недавно Google (ну, хорошо, немного назад) объединил свою документацию и выпустил первоклассное руководство по дизайну для Android. В частности, на странице о поддержке нескольких экранов имеется небольшая графика:

Изображение 174551

Я хотел бы обобщить этот рисунок следующим образом:

  • xdpi: 8 (я знаю, я знаю, я пропустил "h". Думаю, это немой здесь)
  • hdpi: 6
  • mdpi: 4
  • ldpi: 3

Но я не согласен с тем, что они используют mdpi в качестве "базовой линии". Вместо этого я обрабатываю все мои основные изображения, чтобы иметь размеры ширины и высоты, которые кратно по меньшей мере 24 - LCM (наименьшее общее число) целых чисел выше. Иногда бывает удобно добавить коэффициент 5, который бы довел этот LCM до 120. Если это выглядит слишком большим, я мог бы использовать 72 вместо этого - замечательное число с кучей 2 и 3 в нем.

Во всяком случае, когда я выбираю "базовый уровень", то, что я выбираю, это число, которое имеет среди своих факторов несколько из 2 и 3, а иногда и 5. Затем я умножаю этот базовый уровень на некоторую мощность 2, обычно 4 или 8, чтобы определить размер для моего основного изображения. Это позволяет мне масштабировать мастер вниз несколькими способами, чтобы удовлетворить требованиям дизайна. Кстати, именно так Apple и другие решают все. (Вы когда-нибудь замечали, что iPhone 480 = 2 * 2 * 2 * 2 * 2 * 3 * 5? И для 320 вы меняете 3 с другим 2.)

Во всяком случае, максимальный размер изображения 480 должен работать для вас, потому что он, кажется, находится в вашем футбольном пространстве с точки зрения абсолютного размера (исправьте меня, если я ошибаюсь), а небольшое увеличение в начале не должно стоить вам все в порядке верности, потому что вы просто собираетесь масштабировать его обратно, или Android.

И хотя все это напрямую не затрагивает вашу проблему, я думаю, что это поможет вам немного и принести вещи на более гибкую основу.

Так что моя первая мысль :)

Достижение процентов с помощью LinearLayout

Моя вторая мысль заключается в том, чтобы принести некоторую манеру поведения. Это будет немного проще и будет более непосредственно решать вашу проблему "равных границ".

Используйте LinearLayout, организованный в соответствии с этим pesudo-XML:

<LL width=match height=wrap horizontal>
<View width=0 height=0 weight=.05 invisible/>
<ImageView width=wrap height=wrap src=mycircle/>
<View width=0 height=0 weight=.05 invisible/>
</LL>

Невидимые виды будут действовать как разделители, ширина которых будет определяться механизмом компоновки во время выполнения и которая будет равна 0,05 + 0,05 =.1 = 10% от ширины экрана, заставляя ваш круг занимать оставшиеся 90%. (Вы можете, конечно, настроить 0,05 на все, что вам нравится.) Затем Android выберет правильное значение "dpi" и придаст ему 90% размера экрана. Усилия, которые вы ставите при выборе различных размеров изображения выше, будут выплачивать дивиденды в верности при масштабировании изображения.

И это мое мнение о наилучшем подходе к вашей проблеме. Переключайте oddball 47 и 31 primes в качестве факторов ваших размеров изображения в пользу близких чисел (48 и 32), которые представляют собой композиты с низкими штрихами 2, 3 и, возможно, 5, а затем заставляют движок компоновки Android использовать невидимые проставки.

Удачи!

1

Если изображение окружности, которое вы прикрепляете в качестве ссылки, является вашим выбором стиля. Вы можете использовать этот xml. И назовите это подходящим для относительного макета или что-то в качестве фона, также указав его макет: высота и макет: ширина в xml.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval" >
    <gradient android:startColor="#FFFF0000" android:endColor="#80FF00FF" android:angle="270"/>
</shape>
0

Вы можете использовать 9 патчей для этой простой графики. Вот очень хорошее объяснение, что такое 9 патчей и как его использовать. http://radleymarx.com/blog/simple-guide-to-9-patch/

  • 0
    Я тоже думал о 9 патче, но графика очень сложная и содержит много деталей, поэтому я думаю, что в этом случае невозможно использовать 9 патчей.
  • 0
    Папки hdpi / mdpi зависят от плотности пикселей, а не от разрешения. Вы можете масштабировать его программно. Вы знаете разрешение экрана и ориентацию, просто делайте математику и устанавливайте размеры программно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню