【Android Studio/kotlin】スマホの内臓画像データを読み込んで表示させる方法【動画解説付き】
どうも、プログラミングの鬼シヨツ鬼です。
本日はAndroid StudioでKotlinを使って、スマホの内臓画像データを読み込んで表示させる方法を紹介したいと思います。
そんなあなたにおすすめの記事です。
ちなみに、僕はAndroidアプリ開発は今月から学び始めた初心者of初心者です。
初心者だからこそ、分からないところがよく分かるので、きっと参考になるはずです(笑)
初心者の方は僕と一緒に頑張っていきましょう!
また、この記事は、次の動画と同じ内容ですので、文章だけだと分かりづらい場合はこちらもご覧ください。
YouTube:【Androidアプリ開発】スマホに保存された画像をアプリで読み込む方法
完成イメージ
こんな感じで、ボタンを押すとギャラリーが開き、選択した画像が表示されるというアプリを作っていきます。
youtu.be
activity_main.xmlを編集する
activity_main.xmlを作成することで、画面の見た目を作っていきます。
こちらはテキストから編集することもできますが、Android Studioを使うとGUIから直感的に作成することができます。
こんな感じにボタンとImage Viewを配置します。
(配置の仕方は動画を見ると分かりやすいと思います。)
MainActivity.ktを編集する
MainActivity.ktを作成することで、ボタンが押された時の動きを作ることができます。
サンプルプログラムはこんな感じです。
package com.example.hellotest import android.content.Intent import android.graphics.BitmapFactory import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.ImageView import android.widget.TextView import android.widget.Toast class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) var pictureButton : Button = findViewById(R.id.button) //ボタンが押されたらギャラリーを開く pictureButton.setOnClickListener { val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply { addCategory(Intent.CATEGORY_OPENABLE) type = "image/*" } startActivityForResult(intent, READ_REQUEST_CODE) } } //READ_REQUEST_CODEの定義 companion object { private const val READ_REQUEST_CODE: Int = 42 } //写真が選択された後の動き override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { super.onActivityResult(requestCode, resultCode, resultData) if (resultCode != RESULT_OK) { return } when (requestCode) { READ_REQUEST_CODE -> { try { resultData?.data?.also { uri -> val inputStream = contentResolver?.openInputStream(uri) val image = BitmapFactory.decodeStream(inputStream) val imageView = findViewById<ImageView>(R.id.imageView2) imageView.setImageBitmap(image) } } catch (e: Exception) { Toast.makeText(this, "エラーが発生しました", Toast.LENGTH_LONG).show() } } } } }
intentを作る
ボタンが押されたらギャラリーを開くの中でインテントを作っています。
インテントとは、別のアプリを呼び出す際に使う情報をまとめた箱のようなものです。
今回だとインテントに下記のような情報を詰めています。
・Intent.ACTION_OPEN_DOCUMENT:スマホに保存されているドキュメント(ファイル)を開く
・addCategory(Intent.CATEGORY_OPENABLE):開けるタイプのみに限定
・type = "image/*":画像ファイルのみに限定
作成したインテントをstartActivityForResultで実行することで、画像ファイルのみが見えるフォルダ画面が開きます。
onActivityResult
画像が選択されたら、その情報をonActivityResultで取得します。
onActivityResultの3つの引数は以下の通りです。
・requestCode:どの遷移先から戻ってきたのかを判別する
・resultCode:遷移元の操作が成功したのか判別する
・resultData:取得したデータ