15

我有一个onTouch可以区分触摸输入和鼠标左/中/右键单击的视图,如

@Override
public boolean onTouch(View v, MotionEvent event) {
  if (event.getButtonState() == MotionEvent.BUTTON_PRIMARY) // API 14 required
    ...
  ...
}

我也希望这个视图能够响应鼠标滚轮。 onTouch不是办法,我也没有找到任何其他事件处理程序来响应鼠标滚轮。也许视图可以假装可滚动并使用滚动方法做自己的事情?在这一点上,我已经放弃了,并且正在使用键盘输入(1 到 9,加 0)来选择我更喜欢用鼠标滚轮选择的显示元素。
因此,我们将不胜感激一个坚定的提示或一些代码。

不用担心需要键盘和鼠标的 Android UI 会给公众带来麻烦;该应用程序是一个开发工具。

编辑:下面给出了正确的答案,但是这个问题对未来的读者更有帮助,这是(稍微编辑过的)我使用的实际代码:

@Override
public boolean onGenericMotionEvent(MotionEvent event) {
  if (0 != (event.getSource() & InputDevice.SOURCE_CLASS_POINTER)) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_SCROLL:
        if (event.getAxisValue(MotionEvent.AXIS_VSCROLL) < 0.0f)
          selectNext()
        else
          selectPrev();
        return true;
    }
  }
  return super.onGenericMotionEvent(event);
}
4

2 回答 2

12

接受的答案是一个文档链接,该链接将我引导至问题中的示例代码,但该答案已被删除。为了让这个问题不再出现“未回答”,这就是您的视图如何响应鼠标滚轮:

@Override
public boolean onGenericMotionEvent(MotionEvent event) {
  if (0 != (event.getSource() & InputDevice.SOURCE_CLASS_POINTER)) {
    switch (event.getAction()) {
      case MotionEvent.ACTION_SCROLL:
        if (event.getAxisValue(MotionEvent.AXIS_VSCROLL) < 0.0f)
          selectNext();
        else
          selectPrev();
        return true;
    }
  }
  return super.onGenericMotionEvent(event);
}
于 2015-10-12T16:35:12.403 回答
0

鼠标滚轮事件动作被认为是滚动事件

于 2015-03-02T10:36:34.733 回答