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

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

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

OnTouch для элементов GridView - Программирование Android

27.06.2015, 21:25. Просмотров 272. Ответов 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. Причем происходит это даже в той ситуации, когда прокручивать нечего.

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

Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.06.2015, 21:25
Здравствуйте! Я подобрал для вас темы с ответами на вопрос OnTouch для элементов GridView (Программирование Android):

OnTouch из активити для View - Программирование Android
В активити прописан метод onTouch. Что нужно написать чтобы добавленные View так же вызывали выполнение кода при прикосновении

Использование разных onTouch для двух Layout элемента - Программирование Android
В одном Layout имеются два дочерних элемента LinearLayout. Как обработать метод onTouch для каждого отдельно? То есть листать первый и...

OnTouch и onLongClick - Программирование Android
вот есть ImageButon btnAdd @Override public boolean onTouch(final View view, MotionEvent motionEvent) { switch...

registerForContextMenu и ontouch - Программирование Android
Здравствуйте! Столкнулся с проблемой: при единичном нажатии на экран, срабатывает OnTouch public boolean onTouch(View v,...

OnTouch на элементе меню - Программирование Android
как присвоить setOnTouchListener элементу меню?

Вылет onTouch(), перетаскивание - Программирование Android
Хочу сделать так, что при перемещении картинки видел ее координаты. В чем ошибка? Спасибо. protected void onCreate(Bundle...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.06.2015, 21:25
Привет! Вот еще темы с ответами:

Программный вызов onTouch - Программирование Android
В игре после завершения уровня для перехода в следующий нужно сделать один клик (событие Down) Хочу сделать автоматический клик. В...

OnTouch траблы с viewflipper и viewpager - Программирование Android
Доброго всем времени суток! Помогите разобраться, в чем беда. Пытаюсь использовать для свайпинга viewflipper или viewpager. в обоих...

OnTouch узнать цвет пикселя - Программирование Android
Добрый день, форумчане! Начал как хобби изучать андройд программирование. Работаю в Android studio. Сейчас создал проект с Draw2D с...

Одновременное срабатывание onTouch и onItemLongClick - Программирование Android
Добрый день, коллеги, Есть два обработчика: OnTouchListener и onItemLongClickListener. Первый нужен для определения свайпа элемента...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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