2015-05-29 2 views
1

Синие прямоугольники - невидимые области (видимые для отладки). Я нажимаю и что-то происходит. на IDE они находятся в правильных местах. fffКак заставить ImageViews отображаться в одном и том же месте на разных дисплеях?

Но на основе genymotion (той же модели) они размещаются в несколько разных положениях - почему? В чем может быть проблема - экранный затишье? qqq

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" 
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity" 
android:id="@+id/main"> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/background" 
    android:src="@drawable/page_2_bkg" 
    android:layout_alignParentTop="true" /> 

<ImageView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/door_closed2" 
    android:src="@drawable/page2_door_closed" /> 

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/door_open2" 
    android:src="@drawable/page2_door_opened" 
    android:visibility="invisible" /> 

<ImageView 
    android:layout_width="80dp" 
    android:layout_height="300dp" 
    android:id="@+id/boy" 
    android:layout_marginLeft="160dp" 
    android:visibility="visible" 
    android:src="#ff2b16ff" 
    android:layout_marginBottom="50dp" /> 

<ImageView 
    android:layout_width="150dp" 
    android:layout_height="300dp" 
    android:id="@+id/doorBox" 
    android:visibility="visible" 
    android:layout_alignParentTop="true" 
    android:layout_alignRight="@+id/background" 
    android:layout_alignEnd="@+id/background" 
    android:layout_marginRight="118dp" 
    android:layout_marginEnd="118dp" 
    android:src="#ffff3240" /> 

+0

Где ваш xml-код? – Josef

+0

@Josef, теперь я отредактирую его – ERJAN

+0

Что такое идентификатор двух синих прямоугольников? – Josef

ответ

0

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

Это становится немного сложнее с плотностью экрана, потому что 100px на экране плотности 2x будет двигаться только прямоугольник половины, насколько это необходимо, так что вместо того, чтобы работать с пикселями, рассмотреть возможность работы с процентами. Это намного облегчает дело с мыслями.

Например, похоже, что прямоугольник «дверь» составляет от 75% ширины изображения до 90% от ширины изображения. Это около 15% высоты изображения сверху, до примерно 75% от высоты изображения.

Зная все, что (psuedocode пример):

  • DoorRectangle.left = Image.left + (Image.width * 0,75)
  • DoorRectangle.right = Image.left + (Image.width * 0,90)
  • DoorRectangle.top = Image.top + (Image.height * 0,15)
  • DoorRectangle.bottom = Image.top + (Image.height * 0,75)
1

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

Вы можете добиться этого эффекта, выполнив следующие действия:

  • Добавить новый RelativeLayout внутри макета экрана (который также случается быть RelativeLayout)
  • Изменение размера и Переставьте RelativeLayout к центру и потребляю полный размер экрана и т.д.
  • сделать что новым RelativeLayout фонового изображения фото
  • Поместите прямоугольник внутри этой RelativeLayout и позиция всегда будет тем относительно. Вот что такое relative в RelativeLayout означает;)
  • В качестве побочного примечания подразделения «dp» должны учитывать плотность.

То, что вы пытаетесь сделать, это позволить прямоугольник быть в preportion к изображению, но, как вы изменения размера/перемещение изображения, прямоугольник не имеет возможности узнать, размерные preportions от «исходного» изображения (хотя его не является родителем, который является частью проблемы). Если оба объекта перемещаются относительно родителя, вы всегда сохраняете правильные позиции.

+0

Как насчет «единиц измерения dp следует учитывать плотность»? как мне его настроить? – ERJAN

+1

Извинения, я имею в виду «поля», т. Е. Андроид: layout_marginLeft = «100dp», android: layout_marginTop = «100dp». Вы можете отредактировать/добавить их в панель атрибутов предварительного просмотра макета Eclipse или добавить поля в XML прямоугольника самостоятельно. Скоро будет обновлен ответ, чтобы отразить это. – 1owk3y

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