2013-06-26 4 views
3

Я создаю шахматную доску, используя андроид.Иерархия Android Layout для шахматной доски

java: У меня есть объект Board, который содержит массив из 64 объектов Cell. Каждый объект ячейки имеет требуемое фоновое изображение и необязательное изображение переднего плана. Я пытаюсь придумать хороший способ сделать это.

андроид:

То, что я до сих пор: - Каждая ячейка имеет функцию drawSelf, которая возвращает FrameLayout, с двумя точками зрения ребенка изображения для двух изображений. - Board.xml имеет gridlayout как root.

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

Примечание: Я не привязан к этой структуре данных, что я хочу, как конечный результат какой-то способ сделать 8x8 доска с ячейками 1/8 ширины и высоты на квадратной доске, с каждая ячейка имеет возможность отображать два изображения, удерживать идентификатор и запускать вызов onClick (self.id) моей логике игры.

Спасибо.

+0

Вы все еще в этом? – mr5

+0

@ mr5 Я, если у вас есть идеи. – hellyale

ответ

0

Я на самом деле строю то же самое для удовольствия, чтобы расширить свои знания в области развития Android. Я пытаюсь найти подход, в котором у меня есть Framelayout, с 8 LinearLayouts, который содержит 8 LinearLayouts с ImageView в каждом. Этот подход привлекает все для меня, плюс я получаю onclick бесплатно.

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/car_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:background="#66ccff" 
tools:context=".Activity_Main" > 

<FrameLayout 
    android:id="@+id/checker_frame" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="false" > 

    <LinearLayout 
     android:layout_width="315dp" 
     android:layout_height="300dp" 
     android:orientation="vertical" > 

     <LinearLayout 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:layout_weight="1" 
      android:orientation="horizontal" > 

      <ImageView 
       android:id="@+id/square_1_1" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:background="#FFFFFF" 
       android:onClick="squareOnClick" /> 

      <ImageView 
       android:id="@+id/square_1_2" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:background="#000000" 
       android:onClick="squareOnClick" /> 

      <ImageView 
       android:id="@+id/square_1_3" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:background="#FFFFFF" 
       android:onClick="squareOnClick" /> 

      <ImageView 
       android:id="@+id/square_1_4" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:background="#000000" 
       android:onClick="squareOnClick" /> 

      <ImageView 
       android:id="@+id/square_1_5" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:background="#FFFFFF" 
       android:onClick="squareOnClick" /> 

      <ImageView 
       android:id="@+id/square_1_6" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:background="#000000" 
       android:onClick="squareOnClick" /> 

      <ImageView 
       android:id="@+id/square_1_7" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:background="#FFFFFF" 
       android:onClick="squareOnClick" /> 

      <ImageView 
       android:id="@+id/square_1_8" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:layout_weight="1" 
       android:background="#000000" 
       android:onClick="squareOnClick" /> 
     </LinearLayout> 

     --Repeat Linear layouts 

Вы можете видеть, что у меня есть один метод вызова squareOnClick для всех изображений. Каждый клик идет к этому списку. Я могу определить идентификатор квадрата из-за его имя ID, который вы можете реагировать на:

public void squareOnClick(View view) 
{ 
    String idName = getResources().getResourceEntryName(view.getId()); 
    idName = idName.replace("square_", ""); 

    String[] coordinate = idName.split("_"); 
    if(coordinate.length != 2) 
     return; 

    int x = Integer.parseInt(coordinate[0]); 
    int y = Integer.parseInt(coordinate[1]); 
    Log.i("Activity_Checker", "Coordinate pressed: " + x + ":" + y); 

    TextView tv = (TextView) findViewById(R.id.statustextview); 
    tv.setText("X:" + x + " Y:" + y); 
} 

Однако я играл с идеей, если свободный рисунок все, но это только если я не могу понять некоторые из моих других проблем, которые являются:

  • Репозиционирование framelayout правильно
  • Изменение размера framelayout правильно
  • Анимация свойств по раскладок

Вот как далеко я добрался.