Ho implementato il cassetto di navigazione Android nella mia applicazione. Sono in grado di aprire/chiudere il cassetto quando l'utente tocca il lato esterno del cassetto di navigazione. Qualcuno di voi può aiutarmi a rilevare l'evento tocco/clic quando l'utente tocca/fa clic sul lato del cassetto di navigazione. Devo eseguire alcune funzionalità in quell'evento. Si prega di controllare l'immagine allegata. Qualsiasi aiuto sarebbe appagato.Come rilevare l'evento di tocco all'esterno del cassetto di navigazione
risposta
Devi gestire la posizione di tatto in dispatchTouchEvent()
metodo. Controlla di più sulla gerarchia touch 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);
}
È possibile utilizzare onDrawerClosed
quando si tocca schermo al di fuori
onDrawerClosed
chiamerà dopo la chiusura della Navigazione cassetto
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
//do here
}
Grazie per la risposta. onDrawerClosed (Visualizza vista) chiamerà in molti scenari. quello non funzionerà per me. – Ganesh
potrebbe essere d'aiuto [questo] (http://stackoverflow.com/questions/22590247/android-navigation-drawer-doesnt-pass-ontouchevent-to-activity) –
Super cool solution.saved my time !!! – Ganesh