在Android ListView的OnItemClickListener中获取点击坐标

9
假设我有一个Android ListView,我已经将OnItemClickListener附加到它上面:
ListView listView = (ListView) findViewById(...);
listView.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        [...]

当视图中的某个项目被点击时,我可以通过获取 view 的尺寸来确定相应的矩形区域。然而,我希望更精确地获取相应的坐标,以识别用户实际点击的屏幕上的点。

不幸的是,OnItemClickListener API 似乎没有公开这些信息。有没有其他方法可以获取这些详细信息(而不是自豪地重新实现自己的 ListView)?

1个回答

20

我也需要这样做。我在ListView上设置了一个OnTouchListener和一个OnItemClickListener。触摸侦听器首先被触发,因此您可以使用它来设置一个变量,然后可以从您的onItemClick()中访问该变量。重要的是,您的onTouch()返回false,否则它会消耗点击事件。在我的情况下,我只需要X坐标:

private int touchPositionX;

...

getListView().setOnTouchListener(new OnTouchListener() {
  public boolean onTouch(View view, MotionEvent event) {
    touchPositionX = (int)event.getX();
    return false;
  }
});

getListView().setOnItemClickListener(new OnItemClickListener() {
  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    if (touchPositionX < 100) {
    ...

这是一个不错的解决方案。谢谢。 - MattD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接