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 件のコメント:
コメントを投稿