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

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

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

OnTouch для элементов GridView - Android

27.06.2015, 21:25. Просмотров 231. Ответов 0
Метки нет (Все метки)

Здравствуйте.

Дано:
GridView, наполненный View. Каждый из этих вью, по моей задумке, должен реагировать на четыре вида свайпа (вверх, вниз, влево, вправо) четырьмя различными действиями (код под спойлером).

Кликните здесь для просмотра всего текста
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
45
46
47
        public boolean onTouch(View v, MotionEvent event) {
 
            int x = (int) event.getX();
            int y = (int) event.getY();
 
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    xDown = x;
                    yDown = y;
                    break;
                case MotionEvent.ACTION_UP:
                    xUp = x;
                    yUp = y;
 
                    int dx = xUp - xDown;
                    int dy = yUp - yDown;
 
                    //Обработка горизонтальных свайпов
                    if (Math.abs(dx) > Math.abs(dy)) {
                        if (dx == 0) {
                            return false;
                        }
                        if (dx > 0) {
                            //Действие 1
                        } else {
                            //Действие 2
                        }
                    }
 
                    //Обработка вертикальных свайпов
                    if (Math.abs(dy) > Math.abs(dx)) {
                        if (dy == 0) {
                            return false;
                        }
                        if (dy > 0) {
                            //Действие 3
                        } else {
                            //Действие 4
                        }
                    }
                    break;
                case MotionEvent.ACTION_CANCEL:
                    Toast.makeText(context,"Cancelled",Toast.LENGTH_SHORT).show();
                    break;
            }
            return true;
        }


История болезни:
Свайп влево-вправо работает на ура. Свайп вверх-вниз работает очень странно: срабатывает только при каких-то минимальных значениях смещения dy (8-10 пикс.). Если делать свайп длиннее - срабатывает событие ACTION_CANCEL.

После длительных размышлений моё предположение таково: мой собственный свайп, задаваемый для вьюшек внутри GridView конфликтует с вертикальным свайпом, отвечающим за прокрутку самого GridView. Причем происходит это даже в той ситуации, когда прокручивать нечего.

Вопрос, думаю, уже понятен: каким образом этот конфликт обойти или, возможно, воспользоваться каким-то иным подходом для реализации задуманного функционала?

Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2015, 21:25     OnTouch для элементов GridView
Посмотрите здесь:

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

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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