しかしシャッター音が鳴るので、お昼寝の邪魔をしてしまいます。
そこで、シャッター音が鳴らないシンプルなカメラアプリを作ってみようと思います。
アプリにカメラの使用を許可する
AndroidManifest.xml を編集し、アプリにカメラの使用を許可するパーミッションを追加します。
- AndroidManifest.xml に以下を追加
<uses-permission android:name="android.permission.CAMERA" />
アプリを横画面固定にする
- AndroidManifest.xml の <activity> タグに以下を追加
android:screenOrientation="landscape"
カメラが取得した画像を画面に表示する
カメラが取得した画像を画面に表示するコードを作成します。
- MainActivity.java を以下の通り書き換え
package com.example.camera;
import android.app.Activity;
import android.hardware.Camera;
import android.hardware.Camera.Parameters;
import android.hardware.Camera.Size;
import android.os.Bundle;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.view.Window;
import android.view.WindowManager;
import android.widget.FrameLayout;
import android.widget.FrameLayout.LayoutParams;
import java.util.List;
public class MainActivity extends Activity {
SurfaceView sv;
SurfaceHolder sh;
Camera cam;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
requestWindowFeature(Window.FEATURE_NO_TITLE);
FrameLayout fl = new FrameLayout(this);
setContentView(fl);
sv = new SurfaceView(this);
sh = sv.getHolder();
sh.addCallback(new SurfaceHolderCallback());
fl.addView(sv);
}
class SurfaceHolderCallback implements SurfaceHolder.Callback {
@Override
public void surfaceCreated(SurfaceHolder holder) {
cam = Camera.open();
Parameters param = cam.getParameters();
List<Size> ss = param.getSupportedPictureSizes();
Size pictSize = ss.get(0);
param.setPictureSize(pictSize.width, pictSize.height);
cam.setParameters(param);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int f, int w, int h) {
try {
cam.setDisplayOrientation(0);
cam.setPreviewDisplay(sv.getHolder());
Parameters param = cam.getParameters();
List<Size> previewSizes =
cam.getParameters().getSupportedPreviewSizes();
Size pre = previewSizes.get(0);
param.setPreviewSize(pre.width, pre.height);
LayoutParams lp = new LayoutParams(pre.width, pre.height);
sv.setLayoutParams(lp);
cam.setParameters(param);
cam.startPreview();
} catch (Exception e) { }
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
cam.stopPreview();
cam.release();
}
}
}
以上で、スマートフォンに搭載されているカメラを使って取得した画像を画面に表示できるようになりました。次は、撮影ボタンを設置して写真が撮影できるようにします。
こんちには。素敵な記事をありがとうございます。
返信削除Android Studio 2.1.2で実行したところ
Error:java.lang.UnsupportedClassVersionError: com/android/dx/command/Main : Unsupported major.minor version 52.0
とエラーが出ました。
解決方法がわかれば教えていただきたいです。
SDKのバージョンを19にしたらできました。お騒がせしました。
削除大変参考になる記事ありがとうございます。
返信削除現在バージョン24を使用しているのですが、バージョンを変更することなく実装するにはどのようにコードを直せばよいのでしょうか?お手数かとは思いますがご教授いただけないでしょうか。よろしくお願いいたします。
このコードを使用すると、3250px未満のデバイスサイズで画像を解析できますか?
返信削除