我正在编写一个需要响应触摸事件的 Android 应用程序。我希望我的应用程序将列表项的颜色更改为自定义颜色。我编写了以下代码,但只有 MotionEvent.ACTION_DOWN
部分有效。 LogCat 显示 ACTION_CANCEL
和 ACTION_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;
}
});
最佳答案
如果您从 onTouch
方法返回 false
,则不会向监听器传递更多事件。至少在 event.getAction() == MotionEvent.ACTION_DOWN
的情况下,您应该返回 true
。
重构您的代码,如下所示:
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;
}
});
关于java - 不显示 MotionEvent.ACTION_UP 或 MotionEvent.ACTION_CANCEL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10192122/