棋盘的Android布局层次结构

时间:2013-06-26 01:17:22

标签: android layout views grid-layout

我正在使用android视图创建一个棋盘。

java: 我有一个Board对象,它包含一个包含64个Cell对象的数组。每个Cell对象都有一个必需的背景图像和一个可选的前景图像。我想找到一个很好的方法来绘制它。

android:

到目前为止我所拥有的: - 每个单元格都有一个drawSelf函数,它返回一个FrameLayout,并为两个图像提供两个子图像视图。 - board.xml有一个gridlayout作为root。

我尝试过制作这个结构,但是当我尝试将FrameLayouts添加到电路板时,我遇到了各种错误,而且我也遇到了保持FrameLayout受GridLayout网格线限制的问题。

注意:的 我并不依赖于这种数据结构,我想要的最终结果是绘制一块8x8电路板,其中单元的宽度和高度为方板的1/8,每个电池都能显示两个图像,持有一个ID,并触发对我的游戏逻辑的onClick(self.id)调用。

感谢。

1 个答案:

答案 0 :(得分: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

你可以看到我在所有imageview上都有一个squareOnClick调用方法。每次点击都会转到此列表器。我可以通过它的ID名称来识别正方形的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的大小
  • 跨布局的属性动画

这就是我有多远。