アプリ制作実習〜カメラアクティビティ起動〜
こんばんは。
本日もアプリ制作やってました。
どのようなアプリかと言いますとアルバム(ギャラリー)アプリのようなもので、
写真をポラロイド風に加工して保存し、下に手書き風のタイトルを付けて
管理・鑑賞してもらおうというアプリなんですが、
やはりユーザーにどんどん新しい画像を撮って保存してほしい!ので、
カメラアプリを起動して画像を表示するという機能を勉強しました。
新規写真を撮るボタンを押すとカメラやギャラリーが起動するというようにしたいと思います。
public class PhotoNewActivity extends Activity { private static final int REQUEST_IMAGE_CAPTURE = 0; private static final int REQUEST_IMAGE_GALLERY = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.photo_new); Button impt = (Button) findViewById(R.id.button1); impt.setOnClickListener(new View.OnClickListener() { // ギャラリー・写真へ移動できるようにする @Override public void onClick(View v) { String[] str_items = { "カメラから選択", "ギャラリーから選択", "キャンセル" }; new AlertDialog.Builder(PhotoNewActivity.this) .setTitle("選択") .setItems(str_items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { switch (which) { case 0: startCamera(); break; case 1: startGallery(); break; default: break; } } }).show(); } }); } public void startCamera() { // カメラアプリを起動する Intent intent = new Intent();// インテントのインスタンス intent.setAction("android.media.action.IMAGE_CAPTURE");// インテントにアクションをセットする startActivityForResult(intent, REQUEST_IMAGE_CAPTURE);// カメラアプリ起動する } public void startGallery() { // ギャラリーへ遷移 Intent i = new Intent(); i.setType("image/*"); i.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(i, REQUEST_IMAGE_GALLERY); } @Override public void onActivityResult(int rqCode, int rsltCode, Intent data) { switch (rqCode) { case 0: if (rsltCode == RESULT_OK) { try { // 画像データの取得 Bitmap img = (Bitmap) data.getExtras().get("data"); ImageView rslt = (ImageView) findViewById(R.id.imageView1); rslt.setImageBitmap(img); } catch (nullPointerException e) {// nullの例外だと思われ } } break; case 1: if (rsltCode == RESULT_OK) { try { // 画像データの取得 Bitmap img = (Bitmap) data.getExtras().get("data"); ImageView rslt = (ImageView) findViewById(R.id.imageView1); rslt.setImageBitmap(img); } catch (nullPointerException e) {// nullの例外だと思われ } } break; } }
これ実行してみたのですがなんか画像が荒い…
調べてみると、この方法( onActivityResultメソッド)は画像サイズが小さくなってしまうようです。
データベースに保存する機能もついていないし
せっかく高性能カメラを使っているのでデータサイズはそのままで保存する方法を探します。
あと、ギャラリーから選んだ画像は同じようにやっても、表示してくれないですね。
こちらも改良しなくてはならないです。
はぁ…