Im пытается поиграть с несколькими мультитачами в Android.Android multitouch View.OnTouchListener
У меня есть два RelativeLayout на экране, где я хотел бы получить события касания.
fooLayout = (RelativeLayout)findViewById(R.id.foo);
fooLayout.setOnTouchListener(onTouchListener);
barLayout = (RelativeLayout)findViewById(R.id.bar);
barLayout.setOnTouchListener(onTouchListener);
...
View.OnTouchListener onTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
...
Я попытался использовать OnTouchListener для каждого макета, но это, похоже, не работает вообще.
Я понял, что, поскольку метод onTouch получает вид, я мог бы разобраться с тем, как появилось текущее событие касания, и сэкономить идентификатор указателя.
int pointerId = event.getPointerId(event.getActionIndex());
int action = event.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_POINTER_DOWN:
switch (v.getId()) {
case R.id.foo:
fooPointerId = pointerId;
break;
case R.id.bar:
barPointerId = pointerId;
break;
}
Это не работает, как я думал. Когда мой первый палец касается одного из макетов, я получу правильный идентификатор из этого макета. Но когда я положил второй палец в другой макет, он получит идентификатор макета, где я положил свой первый палец.
Я иду об этом неправильно?
Возможно ли это сделать или я должен положить OnTouchListener в верхний вид и выяснить, какой макет Im касается значения x/y события?
Я сделал быстрый тест, сделав 2 пользовательских представления при переопределении onTouchEvent. Если я коснусь и удерживаю один вид, а затем коснусь другого события, которое не будет отправлено. Все примеры, которые я видел до сих пор, включая ссылку, похоже, мультитач в одном представлении. Нет ли способа заставить его работать с несколькими видами? –
Попробуйте расширить группу представлений, такую как относительный макет, а затем в вашем XML поместите это как ваш корень и добавьте в него свои представления. Внесите onTouchEvent в корневой каталог. Я так думаю, что все дочерние представления будут подвергаться воздействию нескольких указателей. – trpride
Итак, я должен был бы определить, какой вид находится при касании, используя значения x/y события в «root»? –