Модераторы: javastic
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не срабатывает dispatchTouchEvent для детей 
:(
    Опции темы
alvlapo
Дата 19.7.2013, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 3.7.2013

Репутация: нет
Всего: нет



Друзья!
Суть такова, на лейауте имеем один LinearLayout (родитель) и трех его отпрысков, так же Linear`ы. Каждый отпрыск содержит в себе N  button. 
Код

<com.example.test.Container android:id="@+id/rowContainer" ... >
        <LinearLayout android:id="@+id/row1" ... >
                <Button android:id="@+id/button1" />
        </LinearLayout>
        ...
        <LinearLayout android:id="@+id/row3" ... >
                <Button android:id="@+id/buttonN" />
        </LinearLayout>
<com.example.test.Container />


Мне нужно на родителе отлавливать жесты пользователя (у меня это прекрасно получается с помощью GestureDetector) но и про кнопки не забывать, кнопки должны так же отрабатывать свое нажатие.

Как я решил подступиться к этой задаче:
  • Породил свой класс Container наследника LinearLayout
  • В этом классе запретил отсылку детям любых евентов onInterceptTouchEvent => true
  • В onTouchEvent передаю все евенты mGestureDetector.onTouchEvent(event)
  • А уже в GestureDetector.SimpleOnGestureListener в интерфесном методе делаю вот что:

Код


        public boolean onDown(MotionEvent e) {
            downEvent = e;
            // Ищем ребенка в области которого было нажатие пальца
            Rect rect = new Rect();
            int childCount = getChildCount();
            int[] listViewCoords = new int[2];
            getLocationOnScreen(listViewCoords);
            int x = (int) e.getRawX() - listViewCoords[0];
            int y = (int) e.getRawY() - listViewCoords[1];
            View child;

            for (int i = 0; i < childCount; i++) {
                child = getChildAt(i);
                child.getHitRect(rect);
                if (rect.contains(x, y)) { // координаты внутри области ребенка
                    mDownView = child; // нашелся
                    break;
                }
            }

            return true;
        }

        @Override
        public boolean onSingleTapUp(MotionEvent e) {
            Log.d(LOG_TAG, "onSingleTapUp. " + e.toString());

            mDownView.dispatchTouchEvent(downEvent); // передаем ACTION_DOWN
            mDownView.dispatchTouchEvent(e); // потом ACTION_UP

            return true;
        }


но это не сработало, кнопки не нажимаются.
    
Вопрос, как передавать в таком случае евент дочерним элементам, конкретно интересуют кнопки?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Android | Следующая тема »


 




[ Время генерации скрипта: 0.0379 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.