OnTouchListener:不同ImageView上的ActionMove事件

时间:2014-02-14 10:33:03

标签: android android-imageview ontouchevent ontouchlistener

我有一个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从不匹配。 每次刷卡时,接收触摸事件的视图始终是第一个点击的视图 怎么了?

1 个答案:

答案 0 :(得分:0)

您在每个ImageView上设置onTouchListener,然后返回true,捕获触摸事件并阻止其他ImageViews将其拾取。我相信如果你只是从onTouch()返回false,它应该可以工作,但如果这不起作用,请告诉我。