Сплит-события движения – одновременное принятие входов к нескольким представлениям

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

Это была функция, добавленная к сотовым устройствам, и ее можно использовать с помощью библиотеки совместимости. Здесь вы найдете больше информации: http://developer.android.com/sdk/android-3.0.html -> Прокрутите вниз до "событий с раздельным касанием"

В основном это говорит: Раньше только одно представление могло принимать события касания за один раз. Android 3.0 добавляет поддержку для разделения событий касания через представления и даже окна, поэтому разные представления могут принимать одновременные события касания. Сплит-события касаются по умолчанию, когда приложение предназначено для Android 3.0. То есть, когда приложение установило значение атрибута android: minSdkVersion или android: targetSdkVersion в значение «11».

Вот пример проекта, который я использую для его проверки: https://sites.google.com/site/droidbean/hologramlwp/downloadmodels/attachments/SplitMotionTest.rar?attredirects=0&d=1

В проекте есть 2 изображения, прикосновение к верхнему приводит к событиям Log.e с тегом «указатель», в то время как нижний вид создает «указатель2», но, как вы можете видеть, касаясь верхнего вида, а затем второго с помощью отдельного пальца ( Оба касаются отдельных видов) выдает только сообщения с первого взгляда в пряниках.

Если один и тот же проект запущен на сотах, он работает правильно, и оба представления создают соответствующие записи журнала «указатель».

Итак, мой вопрос: как мне получить такой же эффект на телефоне, где прячется пряник или какая-либо другая более низкая версия для Android?

Поскольку Gingerbread не поддерживает разделение событий касания, одним из решений было бы создать наложение над двумя представлениями. Например, добавьте пустой RelativeLayout после других представлений в xml или в код, который охватывает два вида, назовем это оверлей. Установите OnTouchListener наложения и программно определите, какой вид события произошел (x, y). Затем отправьте событие до установленного вида onTouchEvent.

Это не очень дружелюбно, поэтому они исправили это.

Пример:

  public boolean onTouch(View v, MotionEvent event) { if(view1.hitTest(event)) { return view1.onTouchEvent(event); } else if(view2.hitTest(event)) { return view2.onTouchEvent(event); } return false; }