MotionEvent ACTION UP 无法检测到长按
MotionEvent ACTION UP Unable to detect long press
我在使用 MotionEvent 时遇到一些问题。我想在用户 按下按钮(但尚未释放) 时显示背景变化,因此 OnClick
可能无法提供帮助。我注意到 MotionEvent
能够检测到按下和释放。
因此,我实现了一个简单的 onTouch
事件,如下所示:
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
// Make Background Changes
Log.i("DOWN", String.valueOf(getAdapterPosition()));
sparseBooleanArray.put(getAdapterPosition(), true);
notifyItemChanged(getAdapterPosition());
} else if (event.getAction() == MotionEvent.ACTION_UP) {
// Revert background to normal
Log.i("UP", String.valueOf(getAdapterPosition()));
sparseBooleanArray.put(getAdapterPosition(), false);
notifyItemChanged(getAdapterPosition());
}
return false;
}
这意味着当我按下 -> 背景变为绿色
当我释放时 -> 恢复到原始状态(白色)。
在普通点击上效果很好,但是当尝试长按时,DOWN
被调用,但是当释放时UP
未被调用。
所以我需要再次执行普通点击,让背景恢复正常。
是原来的设计吗,我需要利用OnLongClickedListener
,在发布时手动恢复正常。
谢谢。
使用按下状态将状态列表用作项目的背景会更容易。参见 https://developer.android.com/guide/topics/resources/drawable-resource#StateList
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@color/colorGreen" />
<!-- This is the default state item, at the end of the list -->
<item android:state_pressed="false"
android:drawable="@color/colorWhite" />
</selector>
我在使用 MotionEvent 时遇到一些问题。我想在用户 按下按钮(但尚未释放) 时显示背景变化,因此 OnClick
可能无法提供帮助。我注意到 MotionEvent
能够检测到按下和释放。
因此,我实现了一个简单的 onTouch
事件,如下所示:
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
// Make Background Changes
Log.i("DOWN", String.valueOf(getAdapterPosition()));
sparseBooleanArray.put(getAdapterPosition(), true);
notifyItemChanged(getAdapterPosition());
} else if (event.getAction() == MotionEvent.ACTION_UP) {
// Revert background to normal
Log.i("UP", String.valueOf(getAdapterPosition()));
sparseBooleanArray.put(getAdapterPosition(), false);
notifyItemChanged(getAdapterPosition());
}
return false;
}
这意味着当我按下 -> 背景变为绿色
当我释放时 -> 恢复到原始状态(白色)。
在普通点击上效果很好,但是当尝试长按时,DOWN
被调用,但是当释放时UP
未被调用。
所以我需要再次执行普通点击,让背景恢复正常。
是原来的设计吗,我需要利用OnLongClickedListener
,在发布时手动恢复正常。
谢谢。
使用按下状态将状态列表用作项目的背景会更容易。参见 https://developer.android.com/guide/topics/resources/drawable-resource#StateList
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
android:drawable="@color/colorGreen" />
<!-- This is the default state item, at the end of the list -->
<item android:state_pressed="false"
android:drawable="@color/colorWhite" />
</selector>