AndroidManifest.xml
カメラを使うために次のパーミッションを指定します。
<uses-permission android:name="android.permission.CAMERA" />
また、activityの属性のandroid:screenOrientation="landscape"を指定します。どうやらカメラは横向き専用なため、この属性を指定しないと90度回転した表示となるようです。
<activity android:label="@string/app_name" android:name=".CameraSample" android:screenorientation="landscape">
サンプルコード
package sgl.example.camera;
import java.io.IOException;
import android.app.Activity;
import android.hardware.Camera;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
public class CameraSample extends Activity{
private final String TAG = "CameraSample";
private SurfaceView cameraView;
SurfaceHolder holder;
Camera camera;
private SurfaceHolder.Callback surfaceHolderCallback = new SurfaceHolder.Callback() {
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
} catch (IOException e) {
e.printStackTrace();
}
}
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
camera.startPreview();
}
public void surfaceDestroyed(SurfaceHolder holder) {
camera.stopPreview();
camera.release();
camera = null;
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "onCreate");
requestWindowFeature(Window.FEATURE_NO_TITLE);
cameraView = new SurfaceView(this);
SurfaceHolder holder = cameraView.getHolder();
holder.addCallback(surfaceHolderCallback);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
setContentView(cameraView);
}
}
SurfaceViewにカメラのプレビューを表示します。SurfaceViewのコールバック関数にはそれぞれSurfaceViewの生成時、構造的な変化時、破棄時の処理をコーディングします。
surfaceCreate
SurfaceViewが生成されたタイミングでカメラを起動します。
surfaceChanged
surfaceCreateメソッドの後に少なくとも一回は呼ばれるようです。このタイミングでカメラのプレビューを開始します。
surfaceDestroyed
SurfaceViewが破棄されたタイミングでプレビューを停止し、カメラを解放します。
そして、ActivityのonCreateが呼び出されたタイミングで、SurfaceViewのコールバック関数を登録します。
実行結果
プレビューは表示されるようになりましたが、端末画面いっぱいに表示されず、正方形(?)の枠内に表示される結果となりました。端末画面いっぱいに表示したいですが、そのための糸口はまだわからない状態です。。
0 件のコメント:
コメントを投稿