Intereting Posts
Признание активности перестает получать обновления, когда телефон переходит в режим ожидания (выключено) Как отправить данные с одного устройства Android на другой? Звонок со второго сима Могу ли я заставить пользователя согласиться с юридической оговоркой перед установкой приложения для Android? Android.util.Log при публикации – что я могу сделать / не делать Закрытие соединения OkHttpClient Изменение цвета фона выбранного элемента в ListView Когда мы используем recyclerView.setHasFixedSize? Можно ли изменить изображение кнопки входа в Facebook в Android Android SDK3? Недопустимое исключение аргумента в диалоговом окне андроида Текст кнопки Android не центрирован при использовании API 17 для рендеринга Как удалить SingleTask-активность с помощью taskAffinity из последних задач, когда она будет завершена? Как настроить Travis-CI для библиотеки Android? Android 8.0 Ошибка Oreo при фокусировке TextInputEditText Использование jBCrypt для соляных паролей в Android-приложении вызывает долгое зависание

Определите, какой вид в данный момент находится в режиме Touched, когда пользователь перемещает палец

У меня есть сетка из 66 просмотров, и если вид коснулся или перетащил / переместился, я бы хотел изменить его цвет фона.

Я предполагаю, что мне нужно поместить прослушиватель касаний в родительскую ViewGroup, но как определить, какой дочерний просмотр перетаскивается или перемещается?

Solutions Collecting From Web of "Определите, какой вид в данный момент находится в режиме Touched, когда пользователь перемещает палец"

Нашел мой ответ здесь:

Android: получить представление только о том, какой контакт был выпущен

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

Сделал это, переопределив dispatchTouchEvent на родительском LinearLayout:

LinearLayout parent = new LinearLayout(this.getActivity()){ @Override public boolean dispatchTouchEvent(MotionEvent ev) { int x = Math.round(ev.getX()); int y = Math.round(ev.getY()); for (int i=0; i<getChildCount(); i++){ LinearLayout child = (LinearLayout)row.getChildAt(i); if(x > child.getLeft() && x < child.getRight() && y > child.getTop() && y < child.getBottom()){ //touch is within this child if(ev.getAction() == MotionEvent.ACTION_UP){ //touch has ended } } } return true; } } 

Не проверено, но я думаю, вы могли бы сделать что-то похожее: ScrollView Inside ScrollView

 parentView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { Log.v(TAG,"PARENT TOUCH"); findViewById(R.id.child).getParent().requestDisallowInterceptTouchEvent(false); return false; } }); childView.setOnTouchListener(new View.OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { Log.v(TAG,"CHILD TOUCH"); // Disallow the touch request for parent on touch of child view v.getParent().requestDisallowInterceptTouchEvent(true); return false; } }); 

Возможно, просто перейдя через все ваши дочерние элементы, установив OnTouchListener.