カメラのビュークラス

クラスの記述

/**
 * CameraView カメラとサーフェイスホルダーをラップしたビュークラス
 * 
 * @author Ryan's Factory
 * @since 2014/09/10
 */
public class CameraView extends SurfaceView implements SurfaceHolder.Callback, Camera.PictureCallback {
	/**
	 * サーフェイスホルダー
	 */
	private SurfaceHolder holder = null;
	/**
	 * カメラ
	 */
	private Camera camera = null;

	/**
	 * コンストラクタ
	 * 
	 * @param context
	 */
	public CameraView(Context context) {
		super(context);
		// サーフェイスホルダーの生成
		holder = getHolder();
		// 実装したコールバックを設定
		holder.addCallback(this);
		// プッシュバッファの設定
		setSurfaceHolderPushBuffers();
	}

	/**
	 * プッシュバッファの設定
	 * This constant was deprecated in API level 11.
	 * this is ignored, this value is set automatically when needed.
	 */
	@SuppressWarnings("deprecation")
	private void setSurfaceHolderPushBuffers() {
		// OSバージョン判定
		if (Build.VERSION.SDK_INT < 11) {
			holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
		}
	}

コンストラクタを実装するだけで、いくつか問題が出てきた。

ひとつめの問題がこれ holder.setType (SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
OSのバージョンによっては例外が発生するらしい。
どこかのブログに「ワーニングが出るけどどうしたらいいだろう」なんて記述があったけど、@SuppressWarnings(“deprecation”) とすればよいだけだ。
急速にOSバージョンがあがり、しかもいろんな機種が存在しそれらに対応しなければいけないとは、厄介なものに手を出した気がする。

ふたつめは、カメラのオブジェクトをメンバーとして含んでいるが、自分としては気にくわない。
カメラはフロントやリアもしかしたらUSBで外付けのカメラなどが出てくるかもしれない。素のクラスをそのまま使うと、今までの経験上苦労するのはまちがいない。
早い時期に本格的なカメラのクラスを実装したほうが良いだろう。

みっつめがサーフェイスホルダー。
なにこれ?
よくわからん

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>