Androidプログラミング

【Android】Kotlinでギャラリーの画像を取得・表示する【ImageView】

ギャラリー画像表示アプリのアイキャッチ画像 Android

Androidアプリからギャラリーに保存されている画像を取得して表示する方法を紹介します。何かとストレージへのアクセスがややこしいAndroidですが、ギャラリーは簡単に利用できるので容易に導入できるのが魅力です。

スポンサーリンク

サンプルアプリ(Kotlin)の前提

GUIとKotlinの紐づけにはviewBindingを使用しています。
またボタンのクリック処理に関しては、リスナクラスを使用しています。

スポンサーリンク

ギャラリーの画像をImageViewに表示するサンプル

ボタンを押すと、ギャラリーが起動し画像を選択し、その画像がアプリ内のImageViewに表示されるサンプルを作成しました。

ギャラリー画像表示アプリの動作
サンプルアプリの画面遷移

ギャラリーでは、「フォルダ選択 > 画像選択」と操作したので上画像では一応2枚分表示していますが、スマホによって違うかもしれません。

XML

画像表示用のImageViewとクリックイベント用のButtonを配置してます。

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical">

    <ImageView
        android:id="@+id/ivPickedImage"
        android:layout_width="200dp"
        android:layout_height="200dp" />
    <Button
        android:id="@+id/btnPickImage"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/btn_pickimage"  />
</LinearLayout>

Kotlin

Intentを用いてギャラリーを呼び出します。

Intent(Intent.ACTION_PICK)を使えば、アプリ外の共有情報を取得できるようです。今回は画像情報を取得するので、typeで「”image/*”」を指定します。

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        // ボタンのリスナクラスのインスタンス作成
        val btnListener = BtnListener()
        // ボタンにリスナを設定
        binding.btnPickImage.setOnClickListener(btnListener)
    }

    // リスナクラス(ボタンのタップ処理)
    private inner class BtnListener: View.OnClickListener{
        override fun onClick(v: View){
            when(v.id){
                // ギャラリーから画像取得
                binding.btnPickImage.id ->{
                    // ギャラリーに遷移するIntentの作成
                    val intent = Intent(Intent.ACTION_PICK)
                    intent.type = "image/*"
                    // ギャラリーへ遷移
                    receivePicture.launch(intent)
                }
            }
        }
    }

    // ギャラリーから画像受け取り
    private val receivePicture =
        registerForActivityResult(
            ActivityResultContracts.StartActivityForResult()
        ){
            if (it.resultCode == Activity.RESULT_OK){
                // 画像を表示(ギャラリーintentから取得)
                pickedmageUri = it.data?.data
                binding.ivPickedImage.setImageURI(pickedmageUri)

            }
        }
}
スポンサーリンク

さいごに

思ったより簡単にできました。
「ギャラリーを参照する」といったようなよく使う機能はちゃんと用意されているのがAndroidのいいところですね。逆にアプリ専用ストレージとかは複雑な気がします。

コメント

タイトルとURLをコピーしました