Динамически размещайте кнопки там, где есть круг на фоновом изображении.

Я новый разработчик Android и пытаюсь разработать игру для Android с помощью eclipse IDE. У которого есть такое игровое поле http://i.imgur.com/bv149i8l.jpg?1

Я просто хочу разместить кнопку там, где есть круг.

Я жестко закодировал позиции кнопок в xml, используя относительную компоновку, но из-за разного размера экранов это решение не работает.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/AbsoluteLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bani_qatar_board" >

<Button
    android:id="@+id/btn_a8"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignLeft="@+id/btn_a1"
    android:layout_below="@+id/btn_a1"
    android:layout_marginTop="82dp"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_a7"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignLeft="@+id/btn_a8"
    android:layout_alignParentBottom="true"
    android:layout_marginBottom="7dp"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_b2"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_below="@+id/btn_a1"
    android:layout_marginLeft="51dp"
    android:layout_marginTop="14dp"
    android:layout_toRightOf="@+id/btn_a1"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_b1"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBottom="@+id/btn_a8"
    android:layout_alignLeft="@+id/btn_b2"
    android:layout_marginBottom="2dp"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_b8"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_above="@+id/btn_a7"
    android:layout_alignLeft="@+id/btn_b1"
    android:layout_marginBottom="11dp"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_c2"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_below="@+id/btn_b2"
    android:layout_marginLeft="52dp"
    android:layout_marginTop="5dp"
    android:layout_toRightOf="@+id/btn_b8"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_c1"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBottom="@+id/btn_a8"
    android:layout_alignLeft="@+id/btn_c2"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_c8"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_above="@+id/btn_b8"
    android:layout_alignLeft="@+id/btn_c1"
    android:layout_marginBottom="7dp"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_b3"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBottom="@+id/btn_b2"
    android:layout_alignLeft="@+id/btn_a2"
    android:layout_marginBottom="4dp"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_c3"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_c2"
    android:layout_alignBottom="@+id/btn_c2"
    android:layout_alignLeft="@+id/btn_b3"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_c7"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_c8"
    android:layout_alignBottom="@+id/btn_c8"
    android:layout_alignLeft="@+id/btn_c3"
    android:background="@drawable/blank"
    android:focusable="true" />

<Button
    android:id="@+id/btn_b7"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBottom="@+id/btn_b8"
    android:layout_alignLeft="@+id/btn_c7"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_a6"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_a7"
    android:layout_alignBottom="@+id/btn_a7"
    android:layout_alignLeft="@+id/btn_b7"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_c4"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_c3"
    android:layout_alignBottom="@+id/btn_c3"
    android:layout_marginLeft="95dp"
    android:layout_toRightOf="@+id/btn_c3"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_c5"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_c1"
    android:layout_alignBottom="@+id/btn_c1"
    android:layout_alignLeft="@+id/btn_c4"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_c6"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_c7"
    android:layout_alignBottom="@+id/btn_c7"
    android:layout_alignLeft="@+id/btn_c5"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_b4"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_b3"
    android:layout_alignBottom="@+id/btn_b3"
    android:layout_marginLeft="50dp"
    android:layout_toRightOf="@+id/btn_c4"
    android:background="@drawable/blank"
    android:paddingBottom="9dp" />

<Button
    android:id="@+id/btn_b5"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_c5"
    android:layout_alignBottom="@+id/btn_c5"
    android:layout_alignLeft="@+id/btn_b4"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_b6"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_b7"
    android:layout_alignBottom="@+id/btn_b7"
    android:layout_alignLeft="@+id/btn_b5"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_a3"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_above="@+id/btn_b2"
    android:layout_alignParentRight="true"
    android:layout_marginRight="13dp"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_a4"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_b5"
    android:layout_alignBottom="@+id/btn_b5"
    android:layout_alignLeft="@+id/btn_a3"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_a5"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignBaseline="@+id/btn_a6"
    android:layout_alignBottom="@+id/btn_a6"
    android:layout_alignLeft="@+id/btn_a4"
    android:background="@drawable/blank" />

<Button
    android:id="@+id/btn_a2"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_above="@+id/btn_b2"
    android:layout_marginLeft="86dp"
    android:layout_toRightOf="@+id/btn_c2"
    android:background="@drawable/blank" />

<TextView
    android:id="@+id/infoDisplay"
    android:layout_width="175dp"
    android:layout_height="wrap_content"
    android:layout_alignTop="@+id/btn_b1"
    android:layout_toLeftOf="@+id/btn_c5"
    android:gravity="center"
    android:text="@string/text"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#000000" />

<Button
    android:id="@+id/btn_a1"
    android:layout_width="27dp"
    android:layout_height="25dp"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="12dp"
    android:layout_marginTop="63dp"
    android:background="@drawable/blank" />

</RelativeLayout>`

Вывод: http://i.imgur.com/2tqrRXe.png?1

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

Примечание. Я не хочу использовать какой-либо игровой движок прямо сейчас для этой цели. Я хочу разработать эту игру в eclipse.

Любые предложения, как я могу разместить кнопки точно на круге. Заранее спасибо.


person Fahid Mahmood    schedule 29.08.2013    source источник
comment
Для этого вам, вероятно, понадобится распознавание образов, если вы точно не знаете, где находятся круги.   -  person g00dy    schedule 29.08.2013
comment
Он знает, где они.   -  person Display Name    schedule 29.08.2013
comment
да, вы пишете, я знаю, что круги расположены на изображении, но с точки зрения кода я не знаю, где находятся круги.   -  person Fahid Mahmood    schedule 29.08.2013


Ответы (2)


Вы также можете жестко закодировать layout_height и layout_width относительного макета. Это фоновое изображение будет автоматически изменено до этого размера макета. Должно работать тогда для каждого размера дисплея.

person MojioMS    schedule 29.08.2013
comment
спасибо за предложение, позвольте мне проверить, работает ли это решение или нет - person Fahid Mahmood; 29.08.2013
comment
Да, это работает, положение кнопок не меняется, но теперь проблема заключается в том, что высота и ширина доски жестко запрограммированы, поэтому другая часть макета отображается черным цветом. Я хочу показать доску на весь экран, пожалуйста, посмотрите изображение. что мне теперь делать, заранее спасибо ссылка - person Fahid Mahmood; 29.08.2013
comment
Тогда вы должны сделать это программно. Снова используйте ваш макет с fill_parent. Затем в коде создайте кнопки и установите их в зависимости от размера экрана в правильное положение. посмотрите здесь: stackoverflow.com/questions/1016896 / - person MojioMS; 29.08.2013
comment
давайте предположим, что я получил screen_width и screen_height, так как я буду вычислять позиции, где находятся круги? - person Fahid Mahmood; 29.08.2013
comment
они в каком-то порядке... Приходится методом проб и ошибок. например, первые 3 находятся в (screenSizeX/3, screenSizeY/3), (2*screenSizeX/3, screenSizeY/3), (screenSizeX, screenSizeY/3) , затем остальные 2 строки. но вы должны повторить попытку, если они не подходят - person MojioMS; 29.08.2013
comment
Хорошо понял вашу точку зрения, позвольте мне проверить, правильно ли это вычисляет значение для пикселей разного размера экрана. - person Fahid Mahmood; 29.08.2013
comment
Хотя это не эффективное решение, но оно будет работать. Так что +1, но я все еще блокирую хороший ответ - person Fahid Mahmood; 29.08.2013

Если вы растягиваете фоновое изображение в обоих измерениях без сохранения AR, вы можете использовать LinearLayout и расположить кнопки, назначив им layout_weight и невидимые виды заполнения.
Но это может быть очень утомительно, и может быть лучше вычислить все позиции в коде. .

person Display Name    schedule 29.08.2013