2012-05-07 32 views
10

Bir fotoğraf makinesinin yüzey görünümünü oluşturmaya çalışıyorum, bu nedenle fotoğraf makinesinin görünümündeyken yüzeyde görüntü veriyor. Şu anda kamera görüntüümde görebildiğim tek şey siyah ekran görünümü. Google’a bakmaya çalıştım, ama şu ana kadar aradığım şeyi bulamadım. Herkes bana bir fikir önerebilir. AyrıcaAndroid Camera Yüzey Görünümü

<uses-permission android:name="android.permission.CAMERA"/>

bu pencere özellikleri:

cevap

18

Bir sınıf yazdım Bu size yardımcı olabilir. Manifest'inizde dosya kopyası

public class Preview_can_work extends Activity { 
     private SurfaceView surface_view; 
     private Camera mCamera; 
     SurfaceHolder.Callback sh_ob = null; 
     SurfaceHolder surface_holder  = null; 
     SurfaceHolder.Callback sh_callback = null; 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      getWindow().setFormat(PixelFormat.TRANSLUCENT); 

      surface_view = new SurfaceView(getApplicationContext()); 
      addContentView(surface_view, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT)); 

      if (surface_holder == null) { 
       surface_holder = surface_view.getHolder(); 
      } 

      sh_callback = my_callback(); 
      surface_holder.addCallback(sh_callback); 
     } 

      SurfaceHolder.Callback my_callback() {  
       SurfaceHolder.Callback ob1 = new SurfaceHolder.Callback() { 

        @Override 
        public void surfaceDestroyed(SurfaceHolder holder) { 
          mCamera.stopPreview(); 
          mCamera.release(); 
          mCamera = null; 
        } 

        @Override 
        public void surfaceCreated(SurfaceHolder holder) { 
         mCamera = Camera.open(); 

          try { 
           mCamera.setPreviewDisplay(holder); 
          } catch (IOException exception) { 
           mCamera.release(); 
           mCamera = null; 
          } 
        } 

        @Override 
        public void surfaceChanged(SurfaceHolder holder, int format, int width, 
          int height) { 
         mCamera.startPreview(); 
        } 
       }; 
       return ob1; 
     } 
    } 

kamera izni için bu kod

<uses-permission android:name="android.permission.CAMERA"/> 

Açıklama:

SurfaceView bir SurfaceHolder içeren View türüdür. SurfaceHolder, medyanızı (genellikle çerçeve) gösterebileceğimiz yüzeyi tutar.

mCamera, kamera örneğini içeren bir Camera nesnesidir.

Varsayılan Kamera örneğini tutmak istediğinizde Camera.open();

Fotoğraf Makinesi mCamera = Camera.open();

Artık açık kameranız var veya varsayılan kamera örneğiniz var. Artık kameradan kareleri yakalamanız ve bir yüzeyde görüntülemeniz gerekiyor. Ancak,

yüzeyinden görüntüleyemezsiniz. Burada SurfaceView, surfaceHolder ve surfaceHolder, kamera çerçevelerini görüntülemek için yüzey sağlar. Şimdi yüzey oluşturulacak üç çağrı geri çağırma işlevleri

olarak adlandırılacaktır.

1. public void surfaceCreated(SurfaceHolder holder) 
2. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) 
3. public void surfaceDestroyed(SurfaceHolder holder) 

Not: - Uygulamanız duraklamaya devam ederse yüzey yok olacaktır.

surfaceCreated: surfaceCreated sizin yüzey oluşturulur çağrılacak bir geri çağırma işlevidir. Burada kameranızı açabilir ve diğer özellikleri ayarlayabilirsiniz.

surfaceChanged: sizin yüzey oluşturulur, bu en az bir kez çağrılır. Bundan sonra yüzeyiniz değiştiğinde çağrılacaktır (Cihaz rotasyonunda). senin yüzey zaten oluşturduk çünkü Burada

senin önizleme başlatmak

olabilir.

surfaceDestroyed: sizin yüzey yok edecek, bu her zaman çağrılır.Şimdi kameranın çerçevelerini görüntüleyebildiğiniz bir yüzeye sahip değilseniz,

mCamera.release() öğesini kullanarak kamerayı serbest bırakabilirsiniz. Bu çok önemlidir çünkü eğer etkinliğiniz duraksa ve başka herhangi bir etkinlik kamerayı açmaya çalışırsa, zaten açılmış olan

kamerayı açabilirsiniz. Kamera paylaşılan bir kaynaktır, bu yüzden bir kerelik bir uygulama bunu kullanabilir. Bir kamera açtığınız zaman bir şeyi hatırlayın, ardından her zaman bırakın.

stopÖn bakış: Önizleme yapmaya başladığınızda, fotoğraf makineniz çerçevelerinizi yakalamaya ve bir yüzeyde görüntülemeye başlar. Artık yüzeyiniz yok edildiyse, fotoğraf makinesinden

çerçevelerini yakalamayı kesmeniz gerekir, böylece mCamera.stopPreview'i çağırmanız gerekir.

+0

Teşekkürler Bharat, bunu bir def haline getireceğim! Tekrar teşekkürler. Herkes “Emülatörde çalışırken fotoğraf makinesi çalışmıyor” hakkında okuyabileceğim iyi bir makale biliyor mu? Hala doğru mu? – Kitaro

+0

ya aslında emülatör oluştururken kamerayı içine eklemeniz gerekiyorsa o zaman çalışacağını düşünüyorum. Seni anlamaya çalışacağım .. –

+0

Tamam, bu yüzden canlı görüntüyü görmek için kamerayı kullanmak için bir cihaza ihtiyacımız yok mu? Okuduğum makalenin bazılarında emülatörde kamera çalıştırılamayacağımızı söylüyorum ama bunun çözülüp çözülmediğinden emin değilim. Lütfen bana haber ver. Teşekkürler. – Kitaro

0

Yap shure iznine ilave

getWindow().setFormat(PixelFormat.TRANSLUCENT); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); 

Mesaj size yardımcı olmak için işe yaramazsa bazı kod

+0

Teşekkürler, izin verdiğiniz gibi önceden ekledim; ve ben surfaceChanged'i kullanmayı mı düşünüyordum? Şu anda tüm kameramın görebildiğim yüzeyi görülebilir siyah… ..... Neden olduğunu anlamıyorum. – Kitaro

İlgili konular