我正在尝试为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;
}
}
);
}
}
}