Получение координат клика в Android ListView OnItemClickListener - PullRequest
9 голосов
/ 05 июля 2011

Допустим, у меня есть 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 Ответ

19 голосов
/ 05 июля 2011

Мне нужно было сделать это тоже. Я установил OnTouchListener и OnItemClickListener в ListView. Сенсорный слушатель запускается первым, так что вы можете использовать его для установки переменной, к которой вы затем можете получить доступ через свой 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) {
    ...
...