2012-03-28 13 views
17

मैंने इस तरह के कुछ अन्य प्रश्न भी देखे हैं लेकिन कोई जवाब नहीं।परिदृश्य से परिदृश्य अभिविन्यास से 180 डिग्री के माध्यम से स्क्रीन रोटेशन का पता लगाने के लिए कैसे?

पोर्ट्रेट से परिदृश्य (या तो दिशा) से घूमते हुए और फिर से, हमें कॉन्फ़िगरेशन चेंज() पर सहायक कॉल मिलती है।

हालांकि, परिदृश्य से परिदृश्य (180 डिग्री के माध्यम से) पर घूर्णन पर कॉन्फ़िगरेशन चेंज() को नहीं कहा जाता है।

मैंने ओरिएंटेशनइवेंट लिस्टनर का उपयोग करने का उल्लेख देखा है, लेकिन यह मेरे लिए फ्लेकी लगता है क्योंकि आप प्रदर्शन अभिविन्यास परिवर्तन को ट्रिगर किए बिना जल्दी से घूम सकते हैं।

मैंने लेआउट चेंज श्रोता जोड़ने की कोशिश की है, लेकिन कोई सफलता नहीं है।

तो सवाल यह है कि, परिदृश्य अभिविन्यास में ऐसे परिवर्तन का विश्वसनीय रूप से पता कैसे लगाया जाए?

+0

मुझे वर्तमान में एक ही समस्या का सामना करना पड़ रहा है। क्या आपको एक संकल्प मिला है? –

+0

क्षमा करें, अभी तक कुछ भी नहीं। –

+0

मुझे एक ही समस्या है..क्या कोई समाधान है ?? अगर आपको यह पता चला तो कृपया पोस्ट करें ... मैं इस –

उत्तर

7

हो सकता है आप इस तरह अपने OrientationEventListener में कुछ तार्किक कोड जोड़ना चाहिए:

mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE); 

OrientationEventListener orientationEventListener = new OrientationEventListener(this, 
     SensorManager.SENSOR_DELAY_NORMAL) { 
    @Override 
    public void onOrientationChanged(int orientation) { 

     Display display = mWindowManager.getDefaultDisplay(); 
     int rotation = display.getRotation(); 
     if ((rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) && rotation != mLastRotation) { 
      Log.i(TAG, "changed >>> " + rotation); 

      // do something 

      mLastRotation = rotation; 
     } 
    } 
}; 

if (orientationEventListener.canDetectOrientation()) { 
    orientationEventListener.enable(); 
} 
+0

में अपना 1 सप्ताह पहले ही खो चुका हूं यह मुझे धन्यवाद देता है .. –

+0

केवल 90 और 270 डिग्री क्यों? फ़ोन आमतौर पर उल्टा नहीं हो सकते हैं, लेकिन टैबलेट करते हैं। एक ही समस्या तब होती है जब आप 180 डिग्री घुमाते हैं। चित्र से – Oliv

+0

इस उत्तर से सावधान रहें! 'अभिविन्यास EventListener' 180 डिग्री अभिविन्यास परिवर्तनों के लिए सही उपकरण नहीं है, क्योंकि यह वास्तविक समय में और' getRotation() 'परिवर्तनों से पहले भी ट्रिगर होता है! 'डिस्प्ले लिस्टनर' एक बेहतर काम करता है क्योंकि यह केवल तभी ट्रिगर होता है जब 'getRotation()' परिवर्तन होता है। – 0101100101

3

मैं इस कोड का उपयोग यह मेरे मामले के लिए काम करने के लिए।

OrientationEventListener mOrientationEventListener = new OrientationEventListener(mActivity) 
    { 
    @Override 
    public void onOrientationChanged(int orientation) 
    { 
     if (orientation == ORIENTATION_UNKNOWN) return; 

     int rotation = mActivity.getWindowManager().getDefaultDisplay().getRotation(); 
     switch (rotation) { 
      case Surface.ROTATION_0: 
      android.util.Log.i(TAG, "changed ROTATION_0 - " + orientation); 
      break; 
      case Surface.ROTATION_90: 
      android.util.Log.i(TAG, "changed ROTATION_90 - " + orientation); 
      break; 
      case Surface.ROTATION_180: 
      android.util.Log.i(TAG, "changed ROTATION_180 - " + orientation); 
      break; 
      case Surface.ROTATION_270: 
      android.util.Log.i(TAG, "changed ROTATION_270 - " + orientation); 
      break; 
     } 
     if ((rotation != mLastRotation) && (rotation & 0x1) == (mLastRotation & 0x1)) 
     { 
      android.util.Log.i(TAG, "unhandled orientation changed >>> " + rotation); 
     } 
     mLastRotation = rotation; 
    } 
    }; 

    if (mOrientationEventListener.canDetectOrientation()){ 
    mOrientationEventListener.enable(); 
    } 
+0

इस उत्तर से सावधान रहें! 'अभिविन्यास EventListener' 180 डिग्री अभिविन्यास परिवर्तनों के लिए सही उपकरण नहीं है, क्योंकि यह वास्तविक समय में और' getRotation() 'परिवर्तनों से पहले भी ट्रिगर होता है! 'डिस्प्ले लिस्टनर' एक बेहतर काम करता है क्योंकि यह केवल तभी ट्रिगर होता है जब 'getRotation()' परिवर्तन होता है। – 0101100101

4

ओरिएंटेशनइवेंटलिस्टर काम नहीं करेगा जब डिवाइस घूर्णन/हिल नहीं रहा है।

मुझे लगता है कि प्रदर्शन श्रोता परिवर्तन का पता लगाने का एक बेहतर तरीका है।

 DisplayManager.DisplayListener mDisplayListener = new DisplayManager.DisplayListener() { 
     @Override 
     public void onDisplayAdded(int displayId) { 
      android.util.Log.i(TAG, "Display #" + displayId + " added."); 
     } 

     @Override 
     public void onDisplayChanged(int displayId) { 
      android.util.Log.i(TAG, "Display #" + displayId + " changed."); 
     } 

     @Override 
     public void onDisplayRemoved(int displayId) { 
      android.util.Log.i(TAG, "Display #" + displayId + " removed."); 
     } 
    }; 
    DisplayManager displayManager = (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE); 
    displayManager.registerDisplayListener(mDisplayListener, UIThreadHandler); 
+0

नोट: इसके लिए एपीआई लेवल 17+ – lapis

+0

की आवश्यकता है जब डिवाइस घुमाने/चलने पर काम करने के लिए आपको OrientationEventlistener की आवश्यकता क्यों है? –

+0

मेरे ऐप को ताजा अभिविन्यास की स्थिति प्रदान करने की आवश्यकता है, लेकिन कभी-कभी अभिविन्यास को एपीआई कॉल करके बदला जा सकता है। अंत में मैंने अपनी स्थिति खींचने के लिए एक थ्रेड का उपयोग किया .. वास्तव में कोई बेहतर समाधान नहीं है क्योंकि यह केवल एपीआई 17+ के साथ काम करता है। – superuser

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