1

我正在做一个测试用户行为的项目。这是我的 XML 布局

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>

<RelativeLayout
    android:id="@+id/TouchArea"
    android:layout_width="240dp"
    android:layout_height="400dp"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:background="#800ff4ff" >

  <LinearLayout
        android:id="@+id/grid1"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:background="#000000"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid2"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/grid1"
        android:background="#FFFFFF"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid3"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/grid2"
        android:background="#000000"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid4"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/grid3"
        android:background="#FFFFFF"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid5"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/grid1"
        android:background="#FFFFFF"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid6"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_below="@+id/grid2"
        android:layout_toLeftOf="@+id/grid3"
        android:background="#000000"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid7"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignTop="@+id/grid6"
        android:layout_toLeftOf="@+id/grid4"
        android:background="#FFFFFF"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid8"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignLeft="@+id/grid4"
        android:layout_alignTop="@+id/grid7"
        android:background="#000000"
        android:orientation="vertical" >
    </LinearLayout>

   <LinearLayout
        android:id="@+id/grid9"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignParentLeft="true"
        android:layout_alignTop="@+id/grid10"
        android:background="#000000"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid10"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_below="@+id/grid6"
        android:layout_toLeftOf="@+id/grid7"
        android:background="#FFFFFF"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid11"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignLeft="@+id/grid7"
        android:layout_alignTop="@+id/grid10"
        android:background="#000000"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid12"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignBottom="@+id/grid11"
        android:layout_alignParentRight="true"
        android:background="#FFFFFF"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid13"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/grid9"
        android:background="#FFFFFF"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid14"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignLeft="@+id/grid10"
        android:layout_alignTop="@+id/grid13"
        android:background="#000000"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid15"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignParentBottom="true"
        android:layout_alignRight="@+id/grid11"
        android:background="#FFFFFF"
        android:orientation="vertical" >
    </LinearLayout>

    <LinearLayout
        android:id="@+id/grid16"
        android:layout_width="60dp"
        android:layout_height="100dp"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/grid12"
        android:background="#000000"
        android:orientation="vertical" >
    </LinearLayout>


</RelativeLayout>

这是它的样子,在一个相对布局内有 16 个网格。

在此处输入图像描述

我想要做的是为每个布局分配计数器,每当用户的手指穿过这个网格时,计数器就会加 1。但是,当我尝试添加 touchListener 并覆盖 onTouch 方法时,它会抛出空指针异常,所以我需要调用 dispatchTouchEvent。但在 dispatchTouchEvent 中,我不确定如何分别获取每个视图。希望你能帮忙

4

1 回答 1

1

您可以android:clickable="true"为每个可点击的布局进行设置。然后你可以实现OnClickListener捕获每个事件。

public class MyClass implements View.OnClickListener {

    // set your on click listeners in onCreate or something

    @Override
    public void onClick(View v) {

        switch(v.getId()) {
            case R.id.grid1:
                // do something
            case R.id.grid2:
                // do something
            case R.id.grid3:
                // do something

                // etc
    }
}
于 2013-04-26T16:55:29.890 回答