Разделить события движения - принимать входные данные для нескольких видов одновременно - PullRequest
7 голосов
/ 11 января 2012

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

Это была функция, добавленная в сотовую сеть, которую можно перенести с помощью библиотеки совместимости.Здесь больше информации: 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», но, как вы можете видеть, касаясь вида сверху, а затем 2-го сотдельный палец (оба касаются отдельных представлений) создает только сообщения из первого представления в прянике.

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

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

1 Ответ

1 голос
/ 10 октября 2013

Поскольку 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;
    }
...