我有一个TableLayout包含16个ImageView(4x4网格),我将实现后续行为: 用户点击一个imageView,改变他的颜色为用户提供反馈,然后他可以滑动(没有从屏幕释放点击)到其他近imageView,所有交叉的imageView将改变颜色。我展示了我用过的代码。该表包含在片段中。
这是我对滑动检查位置的倾听者:
@Override
public boolean onTouch(View v, MotionEvent event) {
float currentX =event.getX();
float currentY=event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
for(int i=0; i<buttons.length;i++) {
if(positions[i].contains(currentX, currentY)) {
buttons[i].setImageResource(R.drawable.grid_button_hover);
return true;
}
}
return true;
}
case MotionEvent.ACTION_MOVE: {
for(int i=0; i<positions.length;i++) {
if(positions[i].contains(currentX, currentY)) {
buttons[i].setImageResource(R.drawable.grid_button_hover);
return true;
}
}
return true;
}
case MotionEvent.ACTION_UP:{
clearButtons();
return true;
}
}
return false;
}
位置和按钮包含RectF(对于网格内的每个imageView),按钮包含ImageView所有imageViews。
这就是我在元素上设置监听器的方式:
GridListener listener = new GridListener(getActivity(), this,
positions, buttons);
for (int i = 0; i < values.length; i++) {
imageViews[i].setOnTouchListener(listener);
}
我的问题是,无论何时我点击,只有imageViews [0]改变颜色。如果我滑动,只更改表格第一行上的imageViews。似乎只有X位置匹配且Y从不匹配。 每次刷卡时,接收触摸事件的视图始终是第一个点击的视图 怎么了?
答案 0 :(得分:0)
您在每个ImageView上设置onTouchListener,然后返回true,捕获触摸事件并阻止其他ImageViews将其拾取。我相信如果你只是从onTouch()返回false,它应该可以工作,但如果这不起作用,请告诉我。