Camera orientation : Camera « Hardware « Android






Camera orientation

   
package app.test;

import java.io.IOException;
import java.io.OutputStream;
import android.app.Activity;
import android.content.ContentValues;
import android.content.res.Configuration;
import android.hardware.Camera;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore.Images.Media;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class Test extends Activity implements OnClickListener,
    SurfaceHolder.Callback, Camera.PictureCallback {
  SurfaceView cameraView;
  SurfaceHolder surfaceHolder;
  Camera camera;

  Button startButton;
  TextView countdownTextView;

  Handler timerUpdateHandler;
  boolean timerRunning = false;
  int currentTime = 10;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    cameraView = (SurfaceView) this.findViewById(R.id.CameraView);
    surfaceHolder = cameraView.getHolder();
    surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    surfaceHolder.addCallback(this);

    countdownTextView = (TextView) findViewById(R.id.CountDownTextView);
    startButton = (Button) findViewById(R.id.CountDownButton);
    startButton.setOnClickListener(this);

    timerUpdateHandler = new Handler();
  }

  public void onClick(View v) {
    if (!timerRunning) {
      timerRunning = true;
      timerUpdateHandler.post(timerUpdateTask);
    }
  }

  private Runnable timerUpdateTask = new Runnable() {
    public void run() {
      if (currentTime > 1) {
        currentTime--;
        timerUpdateHandler.postDelayed(timerUpdateTask, 1000);
      } else {
        camera.takePicture(null, null, Test.this);
        timerRunning = false;
        currentTime = 10;
      }
      countdownTextView.setText("" + currentTime);
    }
  };

  public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    camera.startPreview();
  }

  public void surfaceCreated(SurfaceHolder holder) {
    camera = Camera.open();
    try {
      camera.setPreviewDisplay(holder);
      Camera.Parameters parameters = camera.getParameters();
      if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
        parameters.set("orientation", "portrait");
        camera.setDisplayOrientation(90);
      }
      camera.setParameters(parameters);
    } catch (IOException exception) {
      camera.release();
    }
  }

  public void surfaceDestroyed(SurfaceHolder holder) {
    camera.stopPreview();
    camera.release();
  }

  public void onPictureTaken(byte[] data, Camera camera) {
    Uri imageFileUri = getContentResolver().insert(
        Media.EXTERNAL_CONTENT_URI, new ContentValues());
    try {
      OutputStream imageFileOS = getContentResolver().openOutputStream(
          imageFileUri);
      imageFileOS.write(data);
      imageFileOS.flush();
      imageFileOS.close();
      Toast t = Toast.makeText(this, "Saved JPEG!", Toast.LENGTH_SHORT);
      t.show();
    } catch (Exception e) {
      Toast t = Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT);
      t.show();
    }
    camera.startPreview();
  }
}

//layout/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"
    >    
    <FrameLayout android:id="@+id/FrameLayout01" 
                 android:layout_width="wrap_content" 
                 android:layout_height="wrap_content">
        <SurfaceView android:id="@+id/CameraView" 
                     android:layout_width="fill_parent" 
                     android:layout_height="fill_parent"></SurfaceView>
        <LinearLayout android:id="@+id/LinearLayout01" 
                      android:layout_width="wrap_content" 
                      android:layout_height="wrap_content">
            <TextView android:id="@+id/CountDownTextView" 
                      android:text="10" 
                      android:textSize="100dip" 
                      android:layout_width="fill_parent" 
                      android:layout_height="wrap_content" 
                      android:layout_gravity="center_vertical|center_horizontal|center"></TextView>
            <Button android:layout_width="wrap_content" 
                    android:layout_height="wrap_content" 
                    android:id="@+id/CountDownButton" 
                    android:text="Start Timer"></Button>
        </LinearLayout>
    </FrameLayout>
</LinearLayout>

   
    
    
  








Related examples in the same category

1.Camera preview
2.Camera With Intent
3.Camera Intent
4.Media Store Camera Intent
5.Using Timer to control Camera
6.Camera Preview and Camera.getNumberOfCameras()
7.Take a snapshot
8.Take and preview Photo
9.A grid that displays a set of framed photos.