没有显示MotionEvent.ACTION_UP或MotionEvent.ACTION_CANCEL

时间:2012-04-17 13:23:14

标签: java android touch

我正在编写一个需要响应触摸事件的Android应用。我希望我的应用程序将列表项的颜色更改为自定义颜色。我编写了以下代码,但只有MotionEvent.ACTION_DOWN部分正在运行。 LogCat显示根本没有调用ACTION_CANCELACTION_UP。能否帮助我理解为什么我的代码无效。

这是我的代码......

view.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
            view.setBackgroundColor(Color.rgb(1, 1, 1));
            Log.d("onTouch", "MotionEvent.ACTION_UP" );
        }
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            view.setBackgroundColor(Color.rgb(23, 128, 0));
            Log.d("onTouch", "MotionEvent.ACTION_DOWN" );
        }
        if (event.getAction() == MotionEvent.ACTION_CANCEL) {
            view.setBackgroundColor(Color.rgb(1, 1, 1));
            Log.d("onTouch", "MotionEvent.ACTION_CANCEL" );
        }
        return false;
    }
});

1 个答案:

答案 0 :(得分:19)

如果从false方法返回onTouch,则不会向侦听器传递其他事件。至少在true的情况下,您应该返回event.getAction() == MotionEvent.ACTION_DOWN

重构您的代码,如下所示:

view.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
    view.setBackgroundColor(Color.rgb(1, 1, 1));
    Log.d("onTouch", "MotionEvent.ACTION_UP" );
}
if (event.getAction() == MotionEvent.ACTION_DOWN) {
    view.setBackgroundColor(Color.rgb(23, 128, 0));
    Log.d("onTouch", "MotionEvent.ACTION_DOWN" );
    return true;
}

if (event.getAction() == MotionEvent.ACTION_CANCEL) {
    view.setBackgroundColor(Color.rgb(1, 1, 1));
    Log.d("onTouch", "MotionEvent.ACTION_CANCEL" );
}
return false;
}
});