यह समस्या कुछ हार्डवेयर के साथ बग के रूप में शुरू होने के लिए यहां दिखाई देती है, लेकिन एपीआई 8 में उपलब्ध mCamera.setDisplayOrientation (डिग्री) पर कॉल का उपयोग करके इसे दूर किया जा सकता है। इसलिए इसे मैं इसे लागू करता हूं:
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
if (isPreviewRunning) {
mCamera.stopPreview();
}
Parameters parameters = mCamera.getParameters();
Display display = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
if(display.getRotation() == Surface.ROTATION_0) {
parameters.setPreviewSize(height, width);
mCamera.setDisplayOrientation(90);
}
if(display.getRotation() == Surface.ROTATION_90) {
parameters.setPreviewSize(width, height);
}
if(display.getRotation() == Surface.ROTATION_180) {
parameters.setPreviewSize(height, width);
}
if(display.getRotation() == Surface.ROTATION_270) {
parameters.setPreviewSize(width, height);
mCamera.setDisplayOrientation(180);
}
mCamera.setParameters(parameters);
previewCamera();
}
And the previewCamera method :
public void previewCamera() {
try {
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
isPreviewRunning = true;
} catch(Exception e) {
Log.d(APP_CLASS, "Cannot start preview", e);
}
}
यह एक एचटीसी डिजायर पर था और मुझे रोटेशन की प्रत्येक जाँच में शुरू में लॉगिंग स्टेटमेंट में यह कहने के लिए रखा गया था कि रोटेशन क्या था और फिर डिवाइस पर डिबग किया और लॉगकैट आउटपुट को देखा जब मैंने डिवाइस को घुमाया। एचटीसी डिजायर के लिए, 0 फोन था जैसा कि आपने उम्मीद की थी (पोर्ट्रेट), 90 डिग्री 90 डिग्री फोन को घुमा रहा था COUNTER-CLOCKWISE (मुझे लगता था कि यह घड़ी की दिशा में होता)। कोड में आप देखेंगे कि जब फोन 90 या 180 डिग्री पर था, तो मुझे किसी भी डिस्प्ले रोटेशन को करने की आवश्यकता नहीं थी - डिवाइस खुद को संभालने के लिए लग रहा था। केवल एक बिंदु ठीक से काम नहीं कर रहा है: 270 डिग्री रोटेशन तब होता है जब आप डिवाइस को 90 डिग्री क्लॉकवाइज और डिस्प्ले रोटेशन काउंटर्स को चालू करते हैं जो ठीक है लेकिन अगर आप डिवाइस को 270 डिग्री काउंटर-क्लॉकवाइज घुमाते हैं, तो यह ठीक से क्षतिपूर्ति नहीं करता है।
पीएस उचित घुमावों में चौड़ाई और ऊंचाई के स्वैप को नोट करें।