2012-05-18 32 views
13

मैं केवल पूर्वावलोकन दिखाने के लिए कैमरा का उपयोग कर रहा हूं (चित्र लेने या वीडियो रिकॉर्ड करने के लिए नहीं)।एंड्रॉइड: पोर्ट्रेट मोड में कैमरा पूर्वावलोकन अभिविन्यास

ऐप हमेशा पोर्ट्रेट मोड में है (लैंडस्केप मोड अक्षम है)। कैमरा पूर्वावलोकन हमेशा 90 डिग्री ccw घुमाया जाता है और मैं इसे बदल नहीं सकते (न setDisplayOrientation साथ है और न ही p.set("orientation", "portrait") और p.set("rotation", 90)) साथ।

पूर्वावलोकन हमेशा इस तरह घुमाया है या यह डिवाइस निर्भर है? यदि यह हमेशा की तरह था यह पोर्ट्रेट मोड में, मैं बस बाद में छवि को घुमा सकता था।

या कैमरे को सही तरीके से स्थापित करने का कोई तरीका है? मैंने इसके बारे में बहुत सारे धागे पढ़े हैं लेकिन मेरे लिए कोई जवाब नहीं है (गैलेक्सी एस 2, एंड्रॉइड v2.3)

+0

एफवाईआई मेरा सैमसंग वाई-जी 70 (गैलेक्सी प्लेयर 5.0) हमेशा लैंडस्केप मोड में रहता है। – cliff2310

+1

http://stackoverflow.com/questions/8475532/android-camera-in-view-with-buttons-and-text-over आशा इस तुम्हारी मदद करेगा .. –

उत्तर

31

पोर्ट्रेट अभिविन्यास को मजबूर करने के लिए:

अपने AndroidManifest.xml में android:screenOrientation="portrait" सेट और camera.startPreview();

मैं GS2 पर परीक्षण नहीं किया है, लेकिन यह हर फोन मैं पर परीक्षण किया है पर काम करता है कॉल करने से पहले camera.setDisplayOrientation(90); कहते हैं।

नोट: setDisplayOrientation API Level 8

+0

यह एमुलेटर पर काम करता है, लेकिन पर नहीं मेरा जीएस 2 लेकिन अगर मैं इसे सही ढंग से समझता हूं, तो हमेशा कैमरे को पोर्ट्रेट मोड में 9 0 डिग्री सेल्सियस घूर्णन करना होगा? क्योंकि तब मैं इसे खुद घुमा दूंगा। यह वैसे भी एक बेहतर तरीका होगा क्योंकि यह 8 से कम एपीआई स्तर पर काम करेगा। – DominicM

+1

** यह सैमसंग ऐस ** पर काम नहीं करता है, यहां मैंने समस्या पोस्ट की है http://stackoverflow.com/questions/19176038/camera- setdisplayorientation-function-is-not-working-for-samsung-galaxy-ace-wi – swiftBoy

+0

इसे हमेशा 90 डिग्री घुमाए जाने की आवश्यकता नहीं है। यहां जवाब देखें: http://stackoverflow.com/questions/4697631/android-screen-orientation – Sonhja

5

में जोड़ा गया मैं केवल पोर्ट्रेट मोड के लिए एप्लिकेशन कोडित है।

camera.setDisplayOrientation(90); 

कैमरा बनाने, 90 डिग्री के बारी बारी से करने दिया जाएगा और यह एंड्रॉयड में कुछ उपकरणों के लिए नहीं उपयुक्त अभिविन्यास में हो सकता है आदेश सभी Android उपकरणों के लिए सही पूर्वावलोकन प्राप्त करने के लिए निम्न कोड, जिसमें संदर्भित किया जाता है का उपयोग करें डेवलपर्स साइट।

नीचे आप अपनी गतिविधि भेजना है, cameraId = वापस 0 और सामने का कैमरा के लिए इस कैमरे के लिए setDisplayOrientation सेट करने का तरीका है 1

public static void setCameraDisplayOrientation(Activity activity, int cameraId, android.hardware.Camera camera) { 
    android.hardware.Camera.CameraInfo info = new android.hardware.Camera.CameraInfo(); 
    android.hardware.Camera.getCameraInfo(cameraId, info); 
    int rotation = activity.getWindowManager().getDefaultDisplay().getRotation(); 
    int degrees = 0; 
    switch (rotation) { 
     case Surface.ROTATION_0: 
      degrees = 0; 
      break; 
     case Surface.ROTATION_90: 
      degrees = 90; 
      break; 
     case Surface.ROTATION_180: 
      degrees = 180; 
      break; 
     case Surface.ROTATION_270: 
      degrees = 270; 
      break; 
    } 

    int result; 
    //int currentapiVersion = android.os.Build.VERSION.SDK_INT; 
     // do something for phones running an SDK before lollipop 
     if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
      result = (info.orientation + degrees) % 360; 
      result = (360 - result) % 360; // compensate the mirror 
     } else { // back-facing 
      result = (info.orientation - degrees + 360) % 360; 
     } 

    camera.setDisplayOrientation(result); 
} 

है जो होगा सभी Android उपकरणों के लिए पूरी तरह से।

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