0

Ich baue eine App, die eine Videoaufnahme von einer benutzerdefinierten Kamera mit einer Oberflächenansicht enthält. Es funktioniert gut im Hochformat, aber wenn ich in den Querformat-Modus wechsle, geht die Kameravorschau auf einen leeren Bildschirm.Rückgabe (Android.hardware.Camera) im Querformat

Hier ist der Code, den ich mit:

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 
    setContentView(R.layout.camera_activity); 

     camera1 = Camera.open(camId); 
     try { 
      camera1.setPreviewDisplay(surfaceHolder); 
      camera1.startPreview(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

} 

In der ConfigurationChanged Funktion Ich bin nicht das camera1 Objekt zu bekommen.

Wie kann ich das lösen?

+1

Lesen Sie [this] (https://developer.android.com/guide/topics/resources/runtime-changes.html) zur Handhabung von Orientierungsänderungen in Android. – NonCreature0714

Antwort

0

Sie benötigen onSaveInstanceState (Bundle savedInstanceState) und schreiben Sie die Anwendungszustandswerte, die Sie mit dem Bundle Parameter wie folgt ändern möchten außer Kraft zu setzen:

Sie Instanz von jeder Variablen wie diese

gespeichert wurden, können
@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    // Save UI state changes to the savedInstanceState. 
    // This bundle will be passed to onCreate if the process is 
    // killed and restarted. 
    savedInstanceState.putBoolean("myBoolean", false); 
    savedInstanceState.putDouble("myDouble", 1.121); 
    savedInstanceState.putInt("myInt", 0); 
    savedInstanceState.putString("myString", "Your String"); 
    // etc. 
} 

und das ändert können Sie so retrive

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    // Restore UI state from the savedInstanceState. 
    // This bundle has also been passed to onCreate. 
    boolean myBoolean = savedInstanceState.getBoolean("myBoolean"); 
    double myDouble = savedInstanceState.getDouble("myDouble"); 
    int myInt = savedInstanceState.getInt("myInt"); 
    String myString = savedInstanceState.getString("myString"); 
} 

Hoffe, das wird Ihnen helfen .cheers!

UPDATE:

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
     { 
      p.set("orientation", "portrait"); 
      p.set("rotation",90); 
     } 
     if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) 
     {        
      p.set("orientation", "landscape");   
      p.set("rotation", 90); 
     } 

und setzen Eigenschaft wie folgt:

Camera.Parameters parameters = camera.getParameters(); 
parameters.set("orientation", "portrait"); 
camera.setParameters(parameters); 
+0

aber es kann nicht camera1 Objekt beibehalten ... –

+0

I Update My ans. Hoffnung Sie finden Lösung der Kameraausrichtung –

0

können Sie halten die camera1 Objekt Aktivität Tod und Auferstehung, um zu überleben, oder (weniger effocient) zerstören die Kamera onStop() oder (effizienter) Behalten Sie die Aktivitätsinstanz, wenn sich die Konfiguration ändert.