SORU
1 EKİM 2010, Cuma


Android - Kamera önizleme yana.

Bir Önizleme kamera ekranında bakın ne görüntülemek için kullanıyorum.

Her şey iyi çalışıyor alabilirim, yüzey oluşturulmuş, yüzey ayarlama ve yüzey görüntülenir.

Ancak bu her zaman yanlış bir 90 derecelik bir resim portre modunda açı görüntüler.

Resimde: gibi

alt text

Aşağıdaki kodu kullanarak resim düz koyacaktır farkındayım:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Ancak, diğer öğeleri olan bir Etkinlik içinde Önizleme var ve benim Etkinlik manzara modunda görüntülenecek bir anlam ifade etmez. (Varsayılan olarak devre dışı)

Zaten oraya sadece Önizleme yönünü değiştirmek için, bu yüzden merak ediyorum? Ve benim Etkinlik sonuna doğru Portre modunda görüntülenen bırakmak mı?

Ya zaten doğru görüntülenir böylece önizleme döndürmek için?

CEVAP
24 ŞUBAT 2011, PERŞEMBE


Bu sorun, belirli donanım see here bir hata olarak başlatmak için ortaya çıktı ama mCamera çağrısı kullanılarak aşılabilir.setDisplayOrientation(derece) API 8'de kullanılabilir. Bu nasıl ben bunu uygulamak:

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();                      
    }

Ve previewCamera yöntemi :

public void previewCamera()
{        
    try 
    {           
        mCamera.setPreviewDisplay(mSurfaceHolder);          
        mCamera.startPreview();
        isPreviewRunning = true;
    }
    catch(Exception e)
    {
        Log.d(APP_CLASS, "Cannot start preview", e);    
    }
}

Bu bir HTC Desire ve sahip olduğum için başlangıçta koymak günlük tablolarda her dönüşü çekler ne dönüş oldu ve sonra da debug cihazı ve izlenen logCat çıkışı sırasında çevirdim cihaz. Beklediğiniz gibi, 0 oldu telefon (dikey), 90 derece telefonu SAAT yönünün tersine 90 derece dönüş oldu (saat yönünde olurdu düşünmüştüm). Kodu Telefon 90 veya 180 derece olduğu zaman herhangi bir görüntü rotasyon yapmaya ihtiyacım olmadığını görürsünüz - cihaz bunu kendisi idare etti gibi. Tek bir noktadan düzgün çalışmıyor: 270 derece dönüş olduğunda size dönüş aygıtı saat yönünde 90 derece ve ekran döndürme sayaçları tamam ama eğer döndürme cihazı 270 derece saat yönünün tersine, değil mi görünmesini telafi düzgün.

P. S. genişliği swapover ve uygun devirde yükseklik Unutmayın.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Bryan Smith

    Bryan Smith

    12 Mart 2006
  • Engadget

    Engadget

    18 EYLÜL 2006
  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007