2015-12-15 28 views
5

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. enter image description here Qualsiasi aiuto sarebbe appagato.Come rilevare l'evento di tocco all'esterno del cassetto di navigazione

risposta

7

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); 
} 
+0

Super cool solution.saved my time !!! – Ganesh

0

È 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 
} 
+1

Grazie per la risposta. onDrawerClosed (Visualizza vista) chiamerà in molti scenari. quello non funzionerà per me. – Ganesh

+0

potrebbe essere d'aiuto [questo] (http://stackoverflow.com/questions/22590247/android-navigation-drawer-doesnt-pass-ontouchevent-to-activity) –