Как мы можем получить идентификатор представления, которое было затронуто в onTouchListener в Android, когда пользователь перемещает палец по представлениям?

Я не могу получить второй идентификатор просмотра, где перемещается палец. Я попытался напечатать идентификатор, в котором указатель использует следующее в прослушивателе касания.

    case MotionEvent.ACTION_MOVE:
            int pointerCount = event.getPointerCount();
            for (int i = 0; i < pointerCount; i++) {
                //System.out.println(v.getId());
                System.out.println(event.getX() + "---" + event.getY());
                System.out.println(v.getId());
            }
            break;

Здесь событие — это мой MotionEvent, а v — это представление. Я могу получить положения касания X и Y, но я хочу знать, какой вид пересекается. Я получаю только идентификатор представления первого представления, которое было нажато все время.

Я проверил следующие ссылки для получения помощи, но не смог получить никаких соответствующих подробностей.

Как получить идентификатор движущегося пальца

извлечение идентификатора представления, которое было нажато

как получить конкретную подпрограмму идентификатор представления из представления в Android?

Может кто-нибудь, пожалуйста, помогите мне с этим?


person Mohit Ajwani    schedule 18.02.2015    source источник


Ответы (1)


Если вы установите прослушиватель для представления, вы всегда будете получать это представление внутри события. Например

View one = findById(R.id.one);
one.setOnTouchListener(new OnTouchListener()
{
  public void onClick(View v)
  {
      // v == one
  }
})

Но если вы объявите свою активность сенсорным слушателем:

Activity implements OnTouchListener

Затем вы устанавливаете прослушиватель в корневом представлении:

View rootView = findViewById(R.id.rootView);
rootView.setOnTouchListener(this);

И переопределить onTouch:

@Override
public boolean onTouch(View v, MotionEvent e) { 
    // here v is what you look for
} 

Я думаю, вам следует проверить, настраиваете ли вы onTouchListener для корневого представления, а не для одного конкретного представления.

person Javi Mollá    schedule 18.02.2015
comment
Привет, @Javier, я пробовал, но не помогло. У меня есть относительный макет, внутри которого у меня есть несколько кнопок изображения, которые перекрывают друг друга. Когда я нажимаю кнопку, я могу обнаружить прикосновение. Но проблема заключается в перетаскивании пальца на вторую кнопку, как только я касаюсь другой кнопки, к которой я перемещаюсь, я не могу обнаружить второй вид, идентификатор, который я получаю, по-прежнему относится к первому виду. - person Mohit Ajwani; 18.02.2015
comment
Не могли бы вы опубликовать, как вы настраиваете прослушиватель касаний? - person Javi Mollá; 18.02.2015
comment
Я реализовал слушателя следующим образом: public class MyClass implements OnTouchListener, OnLongClickListener {} @Override public boolean onTouch(View v, MotionEvent event) { //Here I have used switch case to identify the id of the button that was pressed } - person Mohit Ajwani; 19.02.2015
comment
Хорошо, но как вы настраиваете прослушиватель касаний? что-то вроде View rootView = findViewById(R.id.rootView); rootView.setOnTouchListener(this); - person Javi Mollá; 19.02.2015