Android通过单点触摸调用多个按钮

时间:2016-04-27 08:49:52

标签: android button layout touch

我正在尝试为Android做一个非常简单的触摸测试。我做了一个简单的表格布局,有2行,每行有2个视图。它填满了屏幕。我设置了一个改变视图背景颜色的onTouchListener。问题是,如果我浏览多个元素,则只会部署第一个触摸的元素ontouch事件。有没有办法在我轻轻触摸的所有视图上调用一个函数(更改背景颜色)?

这是XML:

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/touch_table"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:stretchColumns="*">

    <TableRow android:layout_weight="1"
        android:minHeight="1dp"
        android:minWidth="1dp">

        <View
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:background="@color/colorAccent"
            />

        <View
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:background="@color/colorAccent"
            />

    </TableRow>

    <TableRow android:layout_weight="1"
        android:minHeight="1dp"
        android:minWidth="1dp">

        <View
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:background="@color/colorAccent"
            />

        <View
            android:layout_height="match_parent"
            android:layout_margin="1dp"
            android:background="@color/colorAccent"
            />

    </TableRow>

和onTouchListener设置方法:

TableLayout layout = (TableLayout)findViewById(R.id.touch_table);
for (int i = 0; i < layout.getChildCount(); i++) {
    View v = layout.getChildAt(i);
    if ( v instanceof TableRow) {
        TableRow row = (TableRow)layout.getChildAt(i);
        for ( int j = 0; j < row.getChildCount(); j++ ) {
            View w = row.getChildAt(j);
            //set touch_listener
            w.setOnTouchListener(
                    new View.OnTouchListener() {
                        public boolean onTouch(View v, MotionEvent m) {
                            // Perform tasks here
                            v.setBackgroundColor(Color.GREEN);
                            return true;
                        }
                    }
            );

        }

    }
}

0 个答案:

没有答案