Intereting Posts
Android Gallery на Android 4.4 (KitKat) возвращает другой URI для Intent.ACTION_GET_CONTENT Ошибка: выполнение выполнено для задачи ': app: packageDebug'. > Com.android.builder.packaging.PackagerException Сохранять данные пользователя в течение дня (в тот же день -> множество пользовательских данных) Как установить цвет текста TextView в коде? Диалог с вкладками с фрагментами в виджетах ActionBarSherlock – тип android.support.v4.app.Fragment не может быть разрешен. Это косвенно ссылается на требуемые файлы .class Выясните, находится ли строка состояния сверху или снизу? Каковы плюсы и минусы для jumboMode (dexOptions) Выполнить модульные тесты для Save with Android Studio Тема v / s Задача Async Как автоматически переключаться между страницами viewPager Sqlite Добавить столбец в таблицу на определенную позицию (Android) Изменить картинку Floating Action Button Android Проверка игровых сервисов Google с использованием firebase Realm findFirst () метод возвращает null

Обнаружить бегущий жест над предметами, которые можно щелкнуть

Представьте макет с 4 кнопками

_______________________________ | | | | A | B | |______________|________________| | | | | C | D | |______________|________________| 

Я хотел бы обнаружить бегущий жест по всему макету, но когда бросок начинается над кнопкой, ее не обнаружено.

Я использую:

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); gesturedetector= new GestureDetector(this, this); findViewById(R.id.touchContainer).setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { Log.e("","TouchEvent"); return gesturedetector.onTouchEvent(event); } }); } 

Это когда нет элементов, которые можно щелкнуть, но не удастся, если запуск начнется над кликабельным элементом.

Как я могу это решить? Предлагая щедрость 50 баллов за полный рабочий ответ

Solutions Collecting From Web of "Обнаружить бегущий жест над предметами, которые можно щелкнуть"

Один из способов добиться этого – переопределить следующий метод:

 public boolean onInterceptTouchEvent(MotionEvent event){ super.onInterceptTouchEvent(event); ... 

Вы можете переопределить этот метод в своем контейнере макета (например, ViewGroup или все, что вы держите с кнопками), и продолжать возвращать false из него, чтобы «перехватывать» события касания, которые потребляются дочерним View s (т. Е. Ваши кнопки ). В рамках этого переопределенного метода вы можете вызвать свой объект детектирования жестов с помощью MotionEvent s. Этот метод также «видит» события, которые также нацелены на сама ViewGroup , что означает – если я правильно помню – вам нужно будет только вызвать ваш детектор жестов из этого метода, и при этом детектор жестов «увидит» все события , Независимо от того, есть ли они над кнопками или нет. Поэтому, если вы перетаскиваете палец, начиная с кнопки, а затем заканчивая в какой-то момент фона макета, детектор жестов должен видеть весь салфетки. Вам не нужно было бы подавать детектор жестов событиями из собственного onTouchEvent() потому что он их уже видел.

Второй способ:

Я просто посмотрел на свой проект, где я использовал это, и понял, что я переключился на другой способ сделать это. То, что я на самом деле делал, это то, что я разработал все мои дочерние View s таким образом, чтобы родительская Activity (или содержащая ViewGroup ) могла зарегистрировать один и тот же объект ViewGroup жестов со всеми этими дочерними View s (каждый из моих специальных видов s имеет метод под названием registerGestureDetector() ). Затем, в переопределенном 'onTouchEvent ()' в моем дочернем View s, я MotionEvent s в детектор жестов, который был зарегистрирован в этом View . Другими словами, родительский макет ViewGroup и все дочерние ViewGroup View просто используют один и тот же детектор жестов.

Я понимаю, что это может показаться немного хлопотным и необязательным, поскольку это можно сделать с помощью onInterceptTouchEvent() , но мое приложение имеет дело с довольно сложными правилами, касающимися того, как мой View должен отвечать на события и жесты касания, и это позволяло Мне применить некоторую дополнительную логику, которая мне нужна для моего приложения. Тем не менее, оба из этих методов, которые я использовал, используют одну и ту же основную задачу здесь: направить MotionEvent s, который нацелил различные View s на один и тот же объект детектирования жеста.