سؤال

أنا أستخدم الكاميرا لإظهار المعاينة فقط (وليس لالتقاط الصور أو تسجيل مقاطع الفيديو).

التطبيق دائمًا في الوضع الرأسي (الوضع الأفقي معطل).يتم تدوير معاينة الكاميرا دائمًا 90 درجة CCW ولا يمكنني تغييرها (لا مع setDisplayOrientation ولا مع p.set("orientation", "portrait" ) و p.set("rotation", 90) ).

هل يتم تدوير المعاينة دائمًا بهذه الطريقة أم أنها تعتمد على الجهاز؟إذا كان الأمر دائمًا على هذا النحو في الوضع الرأسي، فيمكنني فقط تدوير الصورة بعد ذلك.

أم أن هناك طريقة لإعداد الكاميرا بشكل صحيح؟لقد قرأت الكثير من المواضيع حول هذا ولكن لم تنجح أي إجابة بالنسبة لي (Galaxy s2، Android v2.3)

هل كانت مفيدة؟

المحلول

لفرض الاتجاه العمودي:

تعيين android:screenOrientation="portrait" في الخاص بك AndroidManifest.xml و اتصل camera.setDisplayOrientation(90); قبل الاتصال camera.startPreview();

لم أختبر جهاز GS2 ولكنه يعمل على كل هاتف قمت باختباره.

ملحوظة:تمت إضافة setDisplayOrientation في مستوى واجهة برمجة التطبيقات (API) 8

نصائح أخرى

لقد قمت بترميز التطبيق لوضع عمودي فقط.

camera.setDisplayOrientation(90);

سيجعل الكاميرا تدور إلى 90 درجة ، وقد يؤدي ذلك إلى اتجاه غير مناسب لبعض الأجهزة في Android من أجل الحصول على المعاينة الصحيحة لجميع أجهزة Android ، استخدم الكود التالي الذي تم الحكم عليه في موقع المطورين.

أدناه يجب عليك إرسال نشاطك، معرف الكاميرا = الخلف هو 0 وبالنسبة للكاميرا الأمامية هو 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);
} 

هذه هي كيفية ضبط setDisplayOrientation للكاميرا والذي سيكون مثاليًا لجميع أجهزة Android.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top