Я внедрил ящик Android Navigation в своем приложении. Я могу открыть/закрыть ящик, когда пользователь прикасается к боковой стороне ящика навигации. Может ли кто-либо из вас помочь мне обнаружить событие касания/щелчка, когда пользователь коснется/щелкнет по сторонам навигационного ящика. Мне нужно выполнить некоторые функции в этом случае. Пожалуйста, проверьте прилагаемый скриншот. Любая помощь будет назначена.Как обнаружить событие касания вне навигационного ящика
ответ
Вы должны обрабатывать сенсорную позицию в dispatchTouchEvent()
метода. Узнайте больше о сенсорной иерархии here
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_UP) {
if (mDrawerLayout.isDrawerOpen(mRightDrawerListView)) {
View content = findViewById(R.id.right_drawer);
int[] contentLocation = new int[2];
content.getLocationOnScreen(contentLocation);
Rect rect = new Rect(contentLocation[0],
contentLocation[1],
contentLocation[0] + content.getWidth(),
contentLocation[1] + content.getHeight());
View toolbarView = findViewById(R.id.toolbar);
int[] toolbarLocation = new int[2];
toolbarView.getLocationOnScreen(toolbarLocation);
Rect toolbarViewRect = new Rect(toolbarLocation[0],
toolbarLocation[1],
toolbarLocation[0] + toolbarView.getWidth(),
toolbarLocation[1] + toolbarView.getHeight());
if (!(rect.contains((int) event.getX(), (int) event.getY())) && !toolbarViewRect.contains((int) event.getX(), (int) event.getY())) {
isOutSideClicked = true;
} else {
isOutSideClicked = false;
}
} else {
return super.dispatchTouchEvent(event);
}
} else if (event.getAction() == MotionEvent.ACTION_DOWN && isOutSideClicked) {
isOutSideClicked = false;
return super.dispatchTouchEvent(event);
} else if (event.getAction() == MotionEvent.ACTION_MOVE && isOutSideClicked) {
return super.dispatchTouchEvent(event);
}
if (isOutSideClicked) {
//make http call/db request
Toast.makeText(this, "Hello..", Toast.LENGTH_SHORT).show();
}
return super.dispatchTouchEvent(event);
}
Вы можете использовать onDrawerClosed
при прикосновении за пределами экрана
onDrawerClosed
позвонит после закрытия навигации Ящика
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
//do here
}
Спасибо за ваш ответ. onDrawerClosed (View view) вызовет во многих сценариях. это не сработает для меня. – Ganesh
может помочь [this] (http://stackoverflow.com/questions/22590247/android-navigation-drawer-doesnt-pass-ontouchevent-to-activity) –
- 1. Как обнаружить событие касания вне границы действия
- 2. Как обнаружить событие касания двух кнопок одновременно
- 3. Как обнаружить событие касания на движущемся UIImageView?
- 4. Как я могу обнаружить событие касания UIImageView
- 5. Как получить событие касания вне представления
- 6. Как обнаружить событие touchhend вне элемента
- 7. Просмотреть предварительный просмотр навигационного ящика
- 8. Создание навигационного ящика
- 9. Размытие фона навигационного ящика
- 10. Как удалить значок навигационного ящика
- 11. Изменение значка навигационного ящика
- 12. Меню навигационного ящика подкатегорий
- 13. FragmentTabHost из навигационного ящика
- 14. Реализация навигационного ящика
- 15. Отключение навигационного ящика в макете двунаправленного ящика
- 16. Как обнаружить два одновременных касания?
- 17. Ручка ViewPager салфетки внутри навигационного ящика
- 18. Изменение положения значка навигационного ящика
- 19. Управление скоростью скольжения навигационного ящика
- 20. Установить цвет фона навигационного ящика
- 21. Рамка для активности навигационного ящика
- 22. Интеграция tabhost и навигационного ящика
- 23. Внедрение навигационного ящика в действие
- 24. Добавление навигационного ящика в AppCompatActivity
- 25. Значок навигационного ящика не показан
- 26. Изменение полей навигационного ящика Programmatically
- 27. Пользовательский адаптер для навигационного ящика
- 28. Учебник по реализации навигационного ящика
- 29. Отключение навигационного ящика от фрагмента
- 30. Ошибки при проектировании навигационного ящика
Супер классное решение. Сохранено мое время !!! – Ganesh