Montag, 31. Oktober 2011

AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest  
      xmlns:android="http://schemas.android.com/apk/res/android"
      package="de.test3d"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" />

    <application android:icon="@drawable/icon"  
     android:label="@string/app_name">
        <activity android:name=".StartActivity"
                  android:screenOrientation="landscape"
                  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-permission android:name="android.permission.CAMERA" />
    <uses-permission      
     android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />

</manifest>


main.xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout  
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <de.test3d.LeftCamera
        android:layout_gravity="left"
        android:id="@+id/leftCamera1"
        android:layout_width="640dp"
        android:layout_height="480dp"></de.test3d.LeftCamera>
    <de.test3d.RightCamera
        android:layout_gravity="right"
        android:id="@+id/rightCamera1"
        android:layout_width="640dp"
        android:layout_height="480dp"></de.test3d.RightCamera>
</FrameLayout>


StartActivity.java:
import android.app.Activity;
import android.os.Bundle;

public class StartActivity extends Activity  {

    private LeftCamera leftCameraView = null;   
    private RightCamera rightCameraView = null;   
   
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
       
        setContentView(R.layout.main);
       
        leftCameraView = new LeftCamera( 
        this.getApplicationContext(), (LeftCamera)         
        findViewById(R.id.leftCamera1));
        rightCameraView = new RightCamera( 
        this.getApplicationContext(), (RightCamera)  
        findViewById(R.id.rightCamera1));
    }

    @Override
    protected void onPause() {
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }

}


LeftCamera.java:
import java.io.IOException;

import android.content.Context;
import android.hardware.Camera;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class LeftCamera extends SurfaceView implements SurfaceHolder.Callback {

    private static int CAMERAID = 0;

    public LeftCamera(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    private Camera camera;
    private SurfaceHolder previewHolder;
    private boolean previewRunning;

    public LeftCamera(Context context, SurfaceView surfaceView) {
        super(context);
        previewHolder = surfaceView.getHolder();
        previewHolder.addCallback(this);
        previewHolder.setType( 
        SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
       
    }

    public void surfaceCreated(SurfaceHolder holder) {
        camera = Camera.open(CAMERAID);
        try {
            camera.setPreviewDisplay(holder);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        this.onStop();
    }

    public void surfaceChanged(SurfaceHolder holder, int format,
    int width, int height) {
        //not really relevant if the surface never changes
        if (previewRunning)
            camera.stopPreview();
   
        Camera.Parameters p = camera.getParameters();
        p.setPreviewSize(width, height);
        camera.setParameters(p);
   
        try {
            camera.setPreviewDisplay(holder);
        } catch (IOException e) {
            e.printStackTrace();
        }
        previewRunning = true;
        camera.startPreview();
    }

    public void onStop() {
        camera.setPreviewCallback(null);
        camera.stopPreview();
        previewRunning = false;
        camera.release();
    }

    public void onResume() {
        camera = Camera.open(CAMERAID);
        previewRunning = true;
    }

}


RightCamera.java (like LeftCamera.java, except that it uses another CameraId):
import java.io.IOException;

import android.content.Context;
import android.hardware.Camera;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class RightCamera extends SurfaceView implements SurfaceHolder.Callback {

    private static int CAMERAID = 4;

    public RightCamera(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    private Camera camera;
    private SurfaceHolder previewHolder;
    private boolean previewRunning;

    public RightCamera(Context context, SurfaceView surfaceView) {
        super(context);
        previewHolder = surfaceView.getHolder();
        previewHolder.addCallback(this);
        previewHolder.setType( 
        SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
       
    }

    public void surfaceCreated(SurfaceHolder holder) {
        camera = Camera.open(CAMERAID);
        try {
            camera.setPreviewDisplay(holder);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public void surfaceDestroyed(SurfaceHolder holder) {
        this.onStop();
    }

    public void surfaceChanged(SurfaceHolder holder, int format,
    int width, int height) { 
        //not really relevant if the surface never changes
        if (previewRunning)
            camera.stopPreview();
   
        Camera.Parameters p = camera.getParameters();
        p.setPreviewSize(width, height);
        camera.setParameters(p);
   
        try {
            camera.setPreviewDisplay(holder);
        } catch (IOException e) {
            e.printStackTrace();
        }
        previewRunning = true;
        camera.startPreview();
    }

    public void onStop() {
        camera.setPreviewCallback(null);
        camera.stopPreview();
        previewRunning = false;
        camera.release();
    }

    public void onResume() {
        camera = Camera.open(CAMERAID);
        previewRunning = true;
    }
   
}