2011-06-04 2 views
2

J'ai quelques problèmes avec l'aperçu de l'appareil photo sur mon Android.Impossible de créer l'aperçu de la caméra dans onCreate?

En ce moment j'ai un bouton que vous devez appuyer avant d'avoir un aperçu de l'appareil photo. mais je voudrais avoir un aperçu dès que vous démarrez l'application.

Si j'essaie de prendre la partie qui démarre l'aperçu hors du bouton et le mettre dans l'onCreate, cela ne fonctionnera pas, l'aperçu ne commencera pas.

Comment puis-je créer un aperçu sans que l'utilisateur n'ait à appuyer sur un bouton?

En outre, j'ai un HTC Desire HD, et l'aperçu est de 90 degrés pour moi. Pourquoi cela se produit-il?

Camera cam; 
SurfaceView surf; 
SurfaceHolder holder; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    Button btnStart= (Button)findViewById(R.id.startCamPrev); 

    getWindow().setFormat(PixelFormat.UNKNOWN); 

    surf = (SurfaceView)findViewById(R.id.surfaceView); 

    holder = surf.getHolder(); 
    holder.addCallback(this); 
    holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

    btnStart.setOnClickListener(new Button.OnClickListener() { 

     public void onClick(View arg0) { 
      cam = Camera.open(); 
      if(cam != null) 
      { 
       try 
       { 
        cam.setPreviewDisplay(holder); 
        cam.startPreview(); 
       } 
       catch(IOException e) 
       { 
       } 
      } 
     } 
    }); 
} 

fichier Manifest:

 <?xml version="1.0" encoding="utf-8"?> 
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
     package="LSAB.CamTest" 
     android:versionCode="1" 
     android:versionName="1.0"> 
     <application android:icon="@drawable/icon" android:label="@string/app_name"> 
      <activity android:name=".CameraTest" 
        android:label="@string/app_name"> 
       <intent-filter> 
        <action android:name="android.intent.action.MAIN" /> 
        <category android:name="android.intent.category.LAUNCHER" /> 
       </intent-filter> 
      </activity> 

     </application> 
     <uses-sdk android:minSdkVersion="4" /> 

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

Main.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    > 
<TextView 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="Hello World, CameraTest" 
    /> 
<Button 
    android:id = "@+id/startCamPrev" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="- Start Preview -" 
    /> 
<SurfaceView 
    android:id="@+id/surfaceView" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    /> 
</LinearLayout> 

Répondre

0

Avez-vous vérifié les autorisations dans le manifeste? Essayez aussi de ne pas faire autant dans l'OnCreate, c'est une mauvaise pratique et s'il vous plaît, pour l'amour de Dieu, commentez le code si vous voulez de l'aide. Ok, essayez de changer l'orientation de la mise en page et dites-moi ce qui se passe.

+0

désolé, la plupart du temps juste faire quelques tests atm, donc je suppose que je suis paresseux avec les commentaires. – Tistatos

+0

J'insiste, s'il vous plaît poster le manifeste et le main.xml, c'est peut-être le problème, depuis votre problème d'orientation. – AlfredoVR

+0

principal et principal affiché – Tistatos

2

En plus d'ajouter le setPreviewDisplay à essayer onCreate faire ->

Mettre en oeuvre le SurfaceHolder.Callback

Dans onSurfaceChanged méthode réinitialiser le setPreviewDisplay avec la nouvelle surfaceHolder qui est passé à cette méthode.

Cela fonctionne pour moi ..

Questions connexes