2015-12-15 16 views
5

के बाहर स्पर्श ईवेंट का पता लगाने के लिए मैंने अपने एप्लिकेशन में एंड्रॉइड नेविगेशन ड्रॉवर लागू किया है। जब उपयोगकर्ता नेविगेशन ड्रॉवर के बाहर की ओर छूता है तो मैं दराज को खोलने/बंद करने में सक्षम हूं। जब कोई उपयोगकर्ता नेविगेशन ड्रॉवर के किनारे स्पर्श/क्लिक करता है तो आप में से कोई भी स्पर्श/क्लिक ईवेंट का पता लगाने में मेरी सहायता कर सकता है। मुझे उस घटना में कुछ कार्यक्षमता करने की ज़रूरत है। कृपया संलग्न स्क्रीनशॉट की जांच करें। 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

आपके उत्तर के लिए धन्यवाद। ऑन द्राउरक्लोस्ड (व्यू व्यू) कई परिदृश्यों में कॉल करेगा। वह मेरे लिए काम नहीं करेगा। – Ganesh

+0

सहायता हो सकती है [यह] (http://stackoverflow.com/questions/22590247/android-navigation-drawer-doesnt-pass-ontouchevent-to-activity) –

संबंधित मुद्दे