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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
#1

Одновременное срабатывание onTouch и onItemLongClick - Android

15.01.2014, 12:30. Просмотров 814. Ответов 4
Метки нет (Все метки)

Добрый день, коллеги,
Есть два обработчика: OnTouchListener и onItemLongClickListener. Первый нужен для определения свайпа элемента ListView, второй понятно для чего. Проблема в том, что в момент свайпа зачастую срабатывает и onItemLongClickListener. Как бы от этого избавиться? Можно ли как то увеличить время лонгклика? Или есть решение поизящнее?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
lv.setOnTouchListener(new View.OnTouchListener() {
            float x1 = Float.NaN, y1 = Float.NaN, x2=Float.NaN, y2=Float.NaN;
            static final int delta=400;
 
            @Override
            public boolean onTouch(View view, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        x1=event.getX();
                        y1=event.getY();
                        return false;
 
                    case MotionEvent.ACTION_UP:
                        x2=event.getX();
                        y2=event.getY();
                        itemPosition=lv.pointToPosition((int) x2, (int) y2);
 
 
                        if (x2-x1>delta){
                            rightSwipeHandler();
                            return true;
                        }
                        else if (x1-x2>delta){
                            leftSwipeHandler(itemPosition);
                            return true;
                        }
 
                    default:
                        return false;
                }
 
            }
 
        });
 
 
 lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
                     itemPosition=position;
                     actionMode = startActionMode(callback);
            return true;
            }
        });
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.01.2014, 12:30     Одновременное срабатывание onTouch и onItemLongClick
Посмотрите здесь:

Android OnTouch траблы с viewflipper и viewpager
Срабатывание кнопки при удержании ее на определенное время Android
registerForContextMenu и ontouch Android
Android OnTouch MotionEvent в андроид выполняется только один раз
Программный вызов onTouch Android
Android OnTouch и onLongClick
Закрыть диалог во время выполнения процесса (принудительное срабатывание dismiss() Android
Android Использование разных onTouch для двух Layout элемента
Android Вылет onTouch(), перетаскивание
OnTouch узнать цвет пикселя Android
OnTouch из активити для View Android
Android OnTouch на элементе меню

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
verylazy
Заблокирован
15.01.2014, 12:44     Одновременное срабатывание onTouch и onItemLongClick #2
первое что пришло в голову
- запомнить координаты нажатия в onTouch()
- сравнивать координаты при заходе в onItemLongClick() с первоначальными
если не равны - значит это свайп
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
15.01.2014, 13:04  [ТС]     Одновременное срабатывание onTouch и onItemLongClick #3
Цитата Сообщение от verylazy Посмотреть сообщение
первое что пришло в голову
- запомнить координаты нажатия в onTouch()
- сравнивать координаты при заходе в onItemLongClick() с первоначальными
если не равны - значит это свайп
Не пойдет. Зачастую свайп происходит быстрее лонгклика, тот не успевает сработать.

Добавлено через 14 минут
Цитата Сообщение от Severomor1 Посмотреть сообщение
Не пойдет. Зачастую свайп происходит быстрее лонгклика, тот не успевает сработать.
А, сорри, туплю. Да, можно и так наверно, спс.
verylazy
Заблокирован
15.01.2014, 13:05     Одновременное срабатывание onTouch и onItemLongClick #4
Так я об этом и говорю. Если вызвался onItemLongClick то в нем и проверять.
Сижу думаю как объяснить другими словами.
Severomor1
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 36
15.01.2014, 13:52  [ТС]     Одновременное срабатывание onTouch и onItemLongClick #5
Цитата Сообщение от verylazy Посмотреть сообщение
Так я об этом и говорю. Если вызвался onItemLongClick то в нем и проверять.
Сижу думаю как объяснить другими словами.
Спс, до меня уже дошло. ))

Добавлено через 45 минут
Цитата Сообщение от verylazy Посмотреть сообщение
Так я об этом и говорю. Если вызвался onItemLongClick то в нем и проверять.
Сижу думаю как объяснить другими словами.
Сделал, проблема решена, спс. Только не знаю, как в onItemLongClickListener координаты получить. Решил постоянно отслеживать их в onTouch:

Java
1
2
3
4
   case MotionEvent.ACTION_MOVE:
                        x2=event.getX();
                        y2=event.getY();
                        return false;
Yandex
Объявления
15.01.2014, 13:52     Одновременное срабатывание onTouch и onItemLongClick
Ответ Создать тему
Опции темы

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