2012-08-23 9 views
5

Ich bin für ein Android Tablet codieren und ich möchte meine App die Hochformatansicht der surfaceView Kameravorschau verwenden. Es ist Landschaft standardmäßig und ich versuchte, den folgenden Code in das Hochformat zu drehen:Wie kann ich die Android-Kamera in der Oberflächenansicht in Hochformat ändern?

public void surfaceCreated(SurfaceHolder holder){ 
    // The Surface has been created, acquire the camera and tell it where to draw. 
    mCamera = Camera.open(); 
    Parameters params = mCamera.getParameters(); 
    // If we aren't landscape (the default), tell the camera we want portrait mode 
    if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE){ 
    params.set("orientation", "portrait"); // "landscape" 
    // And Rotate the final picture if possible 
    // This works on 2.0 and higher only 
    //params.setRotation(90); 
    // Use reflection to see if it exists and to call it so you can support older versions 
     try { 
     Method rotateSet = Camera.Parameters.class.getMethod("setRotation", new Class[] { Integer.TYPE }); 
     Object arguments[] = new Object[] { new Integer(270) }; 
     rotateSet.invoke(params, arguments); 
     } catch (NoSuchMethodException nsme) { 
     // Older Device 
     Log.v("CameraView","No Set Rotation"); 
     } catch (IllegalArgumentException e) { 
     Log.v("CameraView","Exception IllegalArgument"); 
     } catch (IllegalAccessException e) { 
     Log.v("CameraView","Illegal Access Exception"); 
     } catch (InvocationTargetException e) { 
     Log.v("CameraView","Invocation Target Exception"); 
     } 
    } 
    mCamera.setParameters(params); 
    try{ 
    mCamera.setPreviewDisplay(holder); 
    } catch (IOException exception) { 
    mCamera.release(); 
    mCamera = null; 
    } 
} 

Aber es funktioniert nicht. Könnte jemand das bitte reparieren?

+0

wurde auch mit Objektargumenten versucht [] = new Object [] {new Integer (90)}; aber ich konnte es immer noch nicht reparieren. –

+0

Da Sie die Oberflächenansicht zur Arbeit haben, können Sie mir ein Beispiel geben. Ich muss von einer IP-Kamera zu meinem Android streamen und ich möchte Oberflächenansicht verwenden – Lily

Antwort

7

Sie wollen wahrscheinlich die setDisplayOrientation Funktion wie folgt verwenden:

public void surfaceCreated(SurfaceHolder holder) { 
    if (Build.VERSION.SDK_INT >= 8) mCamera.setDisplayOrientation(90); 
} 

die Kamera params.set("orientation"... Sachen zu verwenden ist nicht konsistent auf unterschiedlichen Geräten und ist wirklich pre-SDK 8 Sprache.