gpt4 book ai didi

android - 如何判断在 MotionEvent.ACTION_UP 上释放了哪个鼠标按钮

转载 作者:行者123 更新时间:2023-11-29 01:03:05 26 4
gpt4 key购买 nike

我有一个鼠标连接到我的 Android 6.0 平板电脑。我正在尝试在我的 onTouch 中监听鼠标左键和右键的按下和释放事件。它在按下鼠标按钮时工作正常,但在释放鼠标按钮时 getButtonState() 总是返回 0,所以我无法判断哪个按钮(左或右?)已被释放。

这是我的代码:

@Override
public boolean onTouch(View v, MotionEvent event) {

if(event.getSource() == InputDevice.SOURCE_MOUSE) {

int action = event.getActionMasked();
int mouseButton = event.getButtonState();

Log.v("Test", "Action: " + action + " MouseButton: " + mouseButton);
return true;
}

return false;
}

Action 为 1(即 ACTION_UP)时,mouseButton 始终为 0,因此我无法判断鼠标左键或右键是否刚刚按下被释放。当 Action 为 0(即 ACTION_DOWN)时,mouseButton 正确设置为 BUTTON_PRIMARYBUTTON_SECONDARY.

那么有人知道如何区分 ACTION_UP 上鼠标左键和右键的释放吗?

最佳答案

回答我自己的问题,isButtonPressed() 是这个问题的关键。通过监视 isButtonPressed() 并在您从 InputDevice.SOURCE_MOUSE 获得 MotionEvent 时缓存其结果,您可以知道按下或释放了哪个按钮。您还需要注意不要将这些观察限制为ACTION_UPACTION_DOWN,因为当一个按钮已经按下而另一个按钮被按下或释放时,你不会得到 ACTION_DOWNACTION_UP 但只要已经按下一个按钮,就会生成一个 ACTION_MOVE 事件。

所以就代码而言,解决方案可能如下所示:

private static boolean mLeftDown = false, mRightDown = false, mMiddleDown = false;

@Override
public boolean onTouch(View v, MotionEvent event) {

if(event.getSource() == InputDevice.SOURCE_MOUSE) {

boolean leftDown = event.isButtonPressed(MotionEvent.BUTTON_PRIMARY);
boolean rightDown = event.isButtonPressed(MotionEvent.BUTTON_SECONDARY);
boolean middleDown = event.isButtonPressed(MotionEvent.BUTTON_TERTIARY);

if(leftDown != mLeftDown) {
// left button pressed or released
mLeftDown = leftDown;
}

if(rightDown != mRightDown) {
// right button pressed or released
mRightDown = rightDown;
}

if(middleDown != mMiddleDown) {
// middle button pressed or released
mMiddleDown = middleDown;
}

return true;
}

return false;
}

这在 Android 6.0 上运行良好。

关于android - 如何判断在 MotionEvent.ACTION_UP 上释放了哪个鼠标按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49590110/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com