2012-11-21 17 views
11

मैंने कैमरा ऐप बनाया है और मैं चाहता हूं कि मेरा ऐप सभी 4 संभावित अभिविन्यासों में बदल जाए और उसके अनुसार कैमरा पूर्वावलोकन अपडेट करें। Android - Camera preview is sidewaysएंड्रॉइड: कैमरा पूर्वावलोकन के लिए स्क्रीन ओरिएंटेशन/रोटेशन

public void updateCameraDisplay(int w, int h) { 
     // set preview size and make any resize, rotate or 
     // reformatting changes here 

     Log.i("CameraPreviews", "Updating camera orientation with w=" + w 
       + " and h=" + h); 
     Parameters parameters = camera.getParameters(); 
     Display display = getActivity().getWindowManager() 
       .getDefaultDisplay(); 

     int rotation = getActivity().getResources().getConfiguration().orientation; 
     Log.i("CameraPreviews", "rotation is " + display.getRotation()); 
     if (display.getRotation() == Surface.ROTATION_0) { 

      parameters.setPreviewSize(h, w); 
      camera.setDisplayOrientation(0); 
     } 

     if (display.getRotation() == Surface.ROTATION_90) { 
      parameters.setPreviewSize(w, h); 
      camera.setDisplayOrientation(270); 
     } 

     if (display.getRotation() == Surface.ROTATION_180) { 
      parameters.setPreviewSize(h, w); 
      camera.setDisplayOrientation(180); 
     } 

     if (display.getRotation() == Surface.ROTATION_270) { 
      parameters.setPreviewSize(w, h); 
      camera.setDisplayOrientation(90); 
     } 

     try { 
      camera.setParameters(parameters); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

मैं मान tweeked है, सैमसंग गैलेक्सी tab2 पर उन्हें परीक्षण अंत में सही झुकाव और यह सब काम करता है पाने के लिए: उस के लिए मैं निम्न विधि मैं से कॉपी किया है इस्तेमाल किया है। जब मैंने एचटीसी एक फोन पर कोशिश की तो यह बिल्कुल काम नहीं करता !!!!! सभी ई उन्मुखता पूरी तरह से गलत हैं! तो मैं इस निष्कर्ष पर पहुंचा हूं कि यह 2 प्रकार के डिवाइस होना चाहिए (या अधिक ... कृपया नहीं!) क्योंकि रोटेशन दर्शाता है कि स्क्रीन को "डिफ़ॉल्ट" स्थिति से कितनी डिग्री घुमाया गया है, तो कुछ उपकरणों में एक डिफ़ॉल्ट स्थिति होती है और दूसरों को एक और। मैं इस डिफ़ॉल्ट रोटेशन के बारे में कैसे पता लगा सकता हूं और तदनुसार मेरे कोड में कार्य कर सकता हूं? ईजे: defaultOrientation = कुछ कोड अगर (defaultOrientation == 0) ... बाकी ....

स्क्रीन अभिविन्यास ताला लगा सवाल से बाहर है। लक्ष्य एपीआई> = 11 बहुत बहुत शुक्रिया

संपादित करें:

public void updateCameraDisplay(int w, int h) { 
     // set preview size and make any resize, rotate or 
     // reformatting changes here 

     Log.i("CameraPreviews", "Updating camera orientation with w=" + w 
       + " and h=" + h); 
     Parameters parameters = camera.getParameters(); 
     Display display = getActivity().getWindowManager() 
       .getDefaultDisplay(); 

     int rotation = getActivity().getResources().getConfiguration().orientation; 
     Log.i("CameraPreviews", "screen rotation is " + rotation); 
     Log.i("CameraPreviews", "display rotation is " + display.getRotation()); 
     if (display.getRotation() == Surface.ROTATION_0) { 

      if (rotation == Configuration.ORIENTATION_LANDSCAPE) { 
       parameters.setPreviewSize(h, w); 
       camera.setDisplayOrientation(0); 
      } else { 
       parameters.setPreviewSize(h, w); 
       camera.setDisplayOrientation(90); 
      } 
     } 

     else if (display.getRotation() == Surface.ROTATION_90) { 
      if (rotation == Configuration.ORIENTATION_PORTRAIT) { 
       parameters.setPreviewSize(w, h); 
       camera.setDisplayOrientation(270); 
      } else { 
       parameters.setPreviewSize(w, h); 
       //camera.setDisplayOrientation(0); 
      } 
     } 

     else if (display.getRotation() == Surface.ROTATION_180) { 
      if (rotation == Configuration.ORIENTATION_LANDSCAPE) { 
      parameters.setPreviewSize(h, w); 
      camera.setDisplayOrientation(180); 
      }else { 
       parameters.setPreviewSize(h, w); 
       camera.setDisplayOrientation(270); 
      } 
     } 

     else if (display.getRotation() == Surface.ROTATION_270) { 
      if (rotation == Configuration.ORIENTATION_PORTRAIT) { 
       parameters.setPreviewSize(w, h); 
       camera.setDisplayOrientation(90); 
      } else { 
       parameters.setPreviewSize(w, h); 
       camera.setDisplayOrientation(180); 
      } 
     } 

     try { 
      camera.setParameters(parameters); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

जब तक कि हम बारी बारी से नहीं है के रूप में पर HTC एक और सैमसंग गैलेक्सी टैब बेहतर काम करता है: मैं अपने को संशोधित किया है पोर्ट्रेट मोड में फोन

+1

मुझे लगता है कि उचित कार्यान्वयन के लिए आपको डिवाइस की ऊंचाई/चौड़ाई की गणना करने की आवश्यकता है ... कोण और डिवाइस वर्तमान ऊंचाई/चौड़ाई के संयोजन का उपयोग करके आप सटीक दृश्य स्थिति – dreamcoder

+0

अभिविन्यास प्राप्त करने के लिए ExifInterface का उपयोग करने में सक्षम होंगे ..it मेरे लिए ठीक काम कर रहा है लेकिन मैंने किसी भी एचटीसी डिवाइस में अपने कोड का परीक्षण नहीं किया है। – Biplab

+0

2 प्रकार के डिवाइस: http://stackoverflow.com/a/35431231/192373 –

उत्तर

0

जिन कारकों के बारे में आपको सोचने की आवश्यकता है वे हैं: डिवाइस का अभिविन्यास, स्क्रीन और कैमरे के बीच की डिग्री, मानते हुए कि आप बैक कैमरा का उपयोग कर रहे हैं, और क्या आप गतिविधि को सक्षम करते हैं अभिविन्यास परिवर्तन को समझें।

और एक महत्वपूर्ण बात यह है कि निर्माता द्वारा लागू कैमरा एचएएल कोड Google के प्रोटोकॉल के अनुरूप है या नहीं।