Форум программистов, компьютерный форум CyberForum.ru

Одновременно обработать два листнера - Android

Восстановить пароль Регистрация
 
yaran
1 / 1 / 0
Регистрация: 08.02.2013
Сообщений: 49
27.01.2016, 07:40     Одновременно обработать два листнера #1
Делаю небольшую игру.
При нажатии на левую половину экрана герой двигается влево, при нажатии на правую - вправо. Так же имеется кнопка прыжка. На relativelayout навешан ontouchlistener, он отслеживает нажатия на половину экрана. На кнопке прыжка свой ontouchlistener.
По отдельности они работают шикарно, но как заставить их работать одновременно?
Сейчас, если нажать на кнопку прыжка, то пока ее не отпустишь, нажатия на половину экрана не будут работать. То же самое и наоборот.
Есть ли какая-то возможность обрабатывать нажатия одновременно, не убирая пальцев с экрана?

Применил к relativelayout свойство, вроде ничего не изменилось.
Java
1
android:splitMotionEvents="true"
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2016, 07:40     Одновременно обработать два листнера
Посмотрите здесь:

Android Не получается обработать долгий клик по TextView
Как обработать нажатие ImageView Android
Android Обработать ответ сервера
Обработать любую ошибку не закрывая программу Android
Как обработать диалог? Android
BitmapFactory не может обработать большое изображение с камеры Android
Android Обработать клик по компоненту
Android Не получается обработать нажатие на кнопку Home в ActionBar
Android Обработать нажатие на кнопки в уведомлении
Можно ли обработать два ListView в пределах одного activity на android? Android
Обработать событие onBackPressed во фрагменте Android
Как обработать нажатие на изображение в элементе listView? Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Valakin
 Аватар для Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 713
27.01.2016, 08:25     Одновременно обработать два листнера #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
чтобы понять какое событие произошло, то с мультитачем надо использовать getActionMasked.
Индекс касания определяется методом getActionIndex.
Кол-во текущих касаний – getPointerCount
Паблито
не спать!
1874 / 1608 / 496
Регистрация: 12.05.2014
Сообщений: 5,810
Завершенные тесты: 1
27.01.2016, 11:02     Одновременно обработать два листнера #3
вангую
в onTouch слушателе надо делать не return true,а false

если не получится - весь код надо видеть
yaran
1 / 1 / 0
Регистрация: 08.02.2013
Сообщений: 49
27.01.2016, 20:06  [ТС]     Одновременно обработать два листнера #4
Цитата Сообщение от Valakin Посмотреть сообщение
чтобы понять какое событие произошло, то с мультитачем надо использовать getActionMasked.
Индекс касания определяется методом getActionIndex.
Кол-во текущих касаний – getPointerCount
Спасибо, почти работает.
Сделал так

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
 relativeLayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
                    case MotionEvent.ACTION_DOWN:
                        // тут код ответственный за движение героя
                        break;
case MotionEvent.ACTION_POINTER_DOWN:
                        int ggg = MotionEventCompat.getActionIndex(event);
                        int xx  = (int) MotionEventCompat.getX(event, ggg);
                        int yy = (int) MotionEventCompat.getY(event, ggg);
                        // тут код проверки соответствия координат нажатия и кнопки. и обработка прыжка вверх.
                        break;
В идеале должно быть так:
По нажатию кнопки прыжка герой подпрыгивает вверх, но если нажимать на половины экрана, то он будет в прыжке еще и двигаться в сторону.

А пока так:
При нажатии одним касанием герой двигается, при нажатии дополнительным касанием на кнопку прыжка герой прыгает, но движение из Action_Down прекращается. Можно ли как-то, не прекращая обработку Action_down, обработать еще и Action_pointer_down?

Добавлено через 2 часа 8 минут
Прошу прощения, затупил. Все нормально работает. Спасибо Valankin.
Yandex
Объявления
27.01.2016, 20:06     Одновременно обработать два листнера
Ответ Создать тему
Опции темы

Текущее время: 09:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru