2015-12-15 3 views
5

Я внедрил ящик Android Navigation в своем приложении. Я могу открыть/закрыть ящик, когда пользователь прикасается к боковой стороне ящика навигации. Может ли кто-либо из вас помочь мне обнаружить событие касания/щелчка, когда пользователь коснется/щелкнет по сторонам навигационного ящика. Мне нужно выполнить некоторые функции в этом случае. Пожалуйста, проверьте прилагаемый скриншот. enter image description here Любая помощь будет назначена.Как обнаружить событие касания вне навигационного ящика

ответ

7

Вы должны обрабатывать сенсорную позицию в 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); 
} 
+0

Супер классное решение. Сохранено мое время !!! – Ganesh

0

Вы можете использовать onDrawerClosed

при прикосновении за пределами экрана onDrawerClosed позвонит после закрытия навигации Ящика

public void onDrawerClosed(View view) { 
      super.onDrawerClosed(view); 
      //do here 
} 
+1

Спасибо за ваш ответ. onDrawerClosed (View view) вызовет во многих сценариях. это не сработает для меня. – Ganesh

+0

может помочь [this] (http://stackoverflow.com/questions/22590247/android-navigation-drawer-doesnt-pass-ontouchevent-to-activity) –

Смежные вопросы