修行その壱「フォトメモ」(2)
写真画像を画面に表示する
前回まではカメラで写真を撮影したあとの画面は真っ白でした。
今回は写真をアプリから確認できるようにします。
カメラアプリから本アプリに戻ったときの処理をonActivityResult()内に実装していきます。
// メイン画面(Activity) public class PhotoMemoActivity extends Activity { static final int REQUEST_CAPTURE_IMAGE = 100;//onActivityResult内で識別するためのID // 描画対象のViewを保持するメンバ変数 private PhotoMemoView mView; // 画面(Activity)が生成されるときの処理 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Uri saveUri;//写真を格納するURI Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//カメラアプリを呼び出す暗黙的インテント saveUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory() + "/tmp.jpg")); intent.putExtra(MediaStore.EXTRA_OUTPUT, saveUri);//カメラアプリをインテントで呼び出すときに写真格納場所情報を渡すよう設定 startActivityForResult(intent, REQUEST_CAPTURE_IMAGE);//カメラアプリ起動 // 描画対象のViewを生成し、 mView = new PhotoMemoView(this); // 描画対象のViewを画面に表示する setContentView(mView); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (REQUEST_CAPTURE_IMAGE == requestCode && resultCode == Activity.RESULT_OK) { Bitmap capturedImage = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + "/tmp.jpg");//ビットマップ画像生成 mView.setImageBitmap(capturedImage);//ビットマップ画像をimageViewに表示 } } // 端末のメニューボタンが押されたときの処理 @Override public boolean onCreateOptionsMenu(Menu menu) { // res/menu/menu.xmlを読み込み、メニューを生成する getMenuInflater().inflate(R.menu.menu, menu); return super.onCreateOptionsMenu(menu); } // メニューの項目が選ばれたときの処理 @Override public boolean onOptionsItemSelected(MenuItem item) { // 選ばれたメニューの種類(ID)に応じて、処理する switch (item.getItemId()) { // メニュー「線の太さ」の処理 case R.id.menu_paintwidth: // まだ処理を実装していない旨のメッセージを表示する Toast.makeText(this, R.string.message_no_function, Toast.LENGTH_SHORT).show(); break; // メニュー「線の色」の処理 case R.id.menu_paintcolor: // まだ処理を実装していない旨のメッセージを表示する Toast.makeText(this, R.string.message_no_function, Toast.LENGTH_SHORT).show(); break; default: break; } return super.onOptionsItemSelected(item); } }
表示できてますね。
- 極意より
写真ファイルは、画像をファイルを扱うのに適したBitmap形式で読み込むとよい
・・・ということで、写真ファイルを読み込み、ビットマップ画像を生成するには
BitmapFactory.decodeFile()
を使います。